2011-07-23 67 views
0

我正在使用下面的代碼來檢查是否選擇了輸入字段,但是我不知道問題在哪裏,因爲它不工作!檢查是否選擇了特定類型的輸入

<html> 
<head> 
<title>Test </title> 
<head> 
<body> 
<form > 
<input type="text" id="select" value="select"/> 
</form> 

<script type="text/javascript" > 
var d, len,i, j, el; 
d=document.forms; 
len=d.length; 
for(i=0; i<len; i++){ 
el=d[i].elements; 
for(j=0;j<el.length; j++) 
    if(el[j].type == "text" && el[j].focus()) 
    { 
    alert("you selected an input field with type text"); 
    } 
} 
</script> 
</body> 
</html> 

任何幫助將不勝感激!謝謝!

回答

0

該腳本只要加載就運行,您需要使用事件處理程序。

window.onload=function(){ 
    var els=document.getElementsByTagName('input'); 
    //Gets all the input elements 
    for(var i=0;i<els.length;i++){ 
    //Attach an event handler that gets called when the element has focus 
    els[i].onfocus=checkElem; 
    } 
    //for your example you could do this all in one line since you only have one element. 
    //document.getElementById('select').onfocus=checkElem; 
} 

var checkElem(){ 
    //Check to see if the input element that registered the event is text or not 
    if(this.type=='text'){ 
    alert('You have selected a text input'); 
    } 
    else{ 
    alert('You have selected a non-text input'); 
    } 
} 

這是一個天真的實現。我不確定你想要完成什麼。通常最好在表單元素上實現某種事件委託。搜索事件代表團,你會發現一些資源。

0

我把你的代碼的以下部分:那些四行

df=document.forms; 
len=d.length; 
for(i=0; i<len; i++) 
els=d[i].elements; 

的幾個注意事項:

  • 第一行:df現在包含窗體列表,確定
  • 二行:但這個d從哪裏來?
    • 它看起來像它沒有初始化,因此不包含多...
    • ...所以我不認爲你能得到它的長度
  • 四線:同樣的事情
    • 如果d沒有初始化,它不指向任何東西,並且不包含任何

您確定您必須使用ddf?而不是隻有df無處不在?


同樣的事情,晚了一點,在你的第二個for()循環:您使用的是被稱爲el變量,但你在哪裏初始化變量?

我看到的是這樣的:

els=d[i].elements; 
for(j=0;j<el.length; j++) 

所以,你把一個叫els變量的元素;並且,然後,你試着從一個叫做el變量來讀......


基本上是:從變量讀取之前,您應該確保它包含的東西;-)

而且,爲了幫助你,你應該安裝調試擴展名,例如Firefox的Firebug (或使用Chrome瀏覽器提供的控制檯):它往往給人有趣的錯誤信息,如:

  http://extern.pascal-martin.fr/so/so-6801104.png

在OP後0



編輯編輯了問題

下一步,我會說,是添加{}其中那些是必要的。

如果在for()之後沒有放{},則循環中只會執行一條指令。
總之,如果你有這樣的:

for (i=0 ; i<10 ; i++) 
    console.log('hello'); 
    console.log('world'); 

然後hello將顯示10倍;但world只會顯示一個。

如果你希望兩個電話的console.log要在for循環,必須使用括號:

for (i=0 ; i<10 ; i++) { 
    console.log('hello'); 
    console.log('world'); 
} 

所以,即使你沒有語法錯誤,現在,你的代碼可能不像你認爲的那樣循環。



最後,如果你想找出哪些元素具有焦點,你應該看看document.activeElement財產(引用)

返回當前如果用戶輸入任何內容,那麼 將獲得按鍵事件。


現在看來,這不是很標準的是,因爲它是HTML-5規範的一部分,但它似乎由多個瀏覽器的支持:

最初是一種專有的DOM在Internet Explorer Explorer 4中,此屬性在Opera和Safari中也受支持(自 版本4開始)。

+0

我改正了這個錯誤是不是df – soso

+0

我改正了這個錯誤el el not els – soso

相關問題