2013-06-24 91 views
2

今天我的問題可能相當簡單。我試圖獲取沒有文本的表單中的所有必需元素(它們是輸入類型,文本類型)。這裏是我的JS:filter()參數沒有給出正確的輸出

var inputs = $('#form').find(':input'); 
if(inputs.filter('[required] [value=""]').first().focus().length) 
//do something 

這是HTML元素:

<input type="text" name="title[]" id="name_" required /> 

我要補充一點,這個輸入元件正處於由JavaScript動態添加,意義,它附加一定的動作有後發生在。

真正的問題是,即使我沒有爲給定的文本字段鍵入值,if語句內部的代碼也不會成立。

任何幫助表示讚賞。

+2

''[required] [value =「」]'與[[required] [value =「」]'不一樣你的意思是'[必填],[值=「」]'? – elclanrs

+0

有沒有空間的區別?你必須在開玩笑我哈哈。這是沒有空間的那個不工作 – Jose

+1

你可以在html中添加'required'的位置嗎 – JasonM

回答

5

輸入標籤的value屬性是不一樣的事,作爲一個輸入元素的value財產。第一個恰好在HTML中,在DOM中解析並作爲defaultValue。後者是表示當前輸入的輸入的動態值。另請參見.prop() vs .attr()

你的元素甚至不一個value屬性,所以它永遠不會匹配選擇。相反,您將需要使用過濾器函數來檢查屬性:

inputs.filter(function() { 
    return this.required && this.value==""; 
    // equivalent: $(this).prop("required") 
    // and   $(this).prop("value") or $(this).val() 
}) 
+0

+1更好的解釋! –

+0

這樣做很有意義,它可能會成爲我的目標。但是,我在一個單獨的項目中運行它,並且工作正常,將其導出到單獨的項目時出現問題。你知道爲什麼或如何工作? – Jose

+0

也許你有一個'>'的地方,但我會希望它始終匹配選擇器。除非你像'.attr(「value」,「...」)那樣調用它。 – Bergi

0

還有2期與您的代碼。

('[required] [value=""]') 

應該是

('[required][value=""]') 

並與上述選擇你永遠無法選擇以下

<input type="text" name="title[]" id="name_" /> 

輸入,因爲它有擺在首位沒有價值屬性。還需要屬性丟失

的輸入,將您的選擇相匹配。將這個簽名

<input type="text" required="true" value="" name="title[]" id="name_" /> 

Check Fiddle

+0

+1。此外,它沒有'required'屬性:-) – Bergi

+0

沒錯......忘了提及:) –

+0

他試圖在某人輸入某些內容後使用過濾器來檢查值。他正在嘗試的方法是錯誤的,如果有人在輸入中實際輸入了某些內容,[value =「」]將不起作用。 @Bergi對他的回答是正確的。 –

3

如果你的意思是選擇所需的輸入是空的,你選擇的是錯的。空間代表祖先的關係,父母/子女:

if (inputs.filter('[required][value=""]').length) { // Element is `required` and empty 
    .... 
}