2012-05-15 182 views
7

我想檢查用戶填寫輸入名稱「field1」時是否存在名爲「field2」的輸入標籤。我通過在field1的input標記上使用onchange事件執行JavaScript函數來實現此目的。 (我正在使用警報框進行測試。)如果field2不存在,JavaScript會單擊一個按鈕,表單將更新爲同時具有field1和field2。但即使field2存在,無論我使用3種方法中的哪一種,警報框都會彈出。我嘗試了各種組合,使用ifnull'undefined'等。檢查是否存在表單輸入

爲什麼彈出警告框如果field2存在?

function foobar(){ 

if(!document.getElementsByName("field2"){ 
alert("foobar"); 
} 

if(!document.forms[0].field2){ 
alert("foobar"); 
} 

if(!document.forms[0].elements.namedItem("field2"){ 
alert("foobar"); 
} 
} 
+0

請創建一個包含您的HTML代碼的http://jsfiddle.net/。 –

+0

順便說一句,你的代碼不完全正確,但我不能重現你看到的行爲。如果存在'field2',則不會顯示警報:http://jsfiddle.net/jS7dT/。你必須提供更多的信息.​​..... –

回答

2

其實,問題是,頁面有各種形式,因此forms[0]不是指我想要的形式。所以我認爲最好的方法是使用this並直接參考input字段。此外,與undefined而不是!比較更清楚。

這工作:

function foobar(fooform){ 
    if (fooform.field2 === undefined) { 
     alert("foobar"); 
    } 
} 

這樣調用:

foobar(this.form); 
+0

它必須是fooform.field2,舊的(fooform){if(field2)...}會拋出一個field2未定義的錯誤。 – ppostma1

+0

在這一個上捎帶, 'if(fooform.field2!= undefined){alert(「foobar」); }' 對於閱讀此內容的其他人,請確保您沒有使用'fooform.field2.value'或引用任何其他屬性,因爲這樣做不起作用。 –

6

你缺少一個支架:if(!document.getElementsByName("field2"))

+5

同樣在'if(!document.forms [0] .elements.namedItem(「field2」)' – jmar777

+1

@ jmar777:對,我甚至沒有讀過那麼遠的代碼;) – Amberlamps

+1

它需要一個村莊......或類似的東西:p – jmar777

0

只是爲了使用getElementsByName因爲更新,並比較空不能正常工作了。現在有效的是檢查元素的長度。

if(document.getElementsByName("field2").length<=0) { 
    // then field2 does not exist 
}