2014-02-25 101 views
0

元素&的代碼。JQuery屬性(空)值選擇器,不能正常工作

HTML

<input value="" name="data[Filter][address]" type="text" /> 
<input value="" name="data[Filter][client]" type="text" /> 
<input value="" name="data[Filter][tenant]" type="text" /> 
<input value="" name="data[Filter][contract_end_date]" type="text" /> 

的Javascript

console.log($("[name*='data\\[Filter\\]'][value!='']").serialize()); 

的問題:即使它們都是空的,他們是序列化。
爲什麼?

+1

那麼你的元素沒有一個值爲「」的屬性值,所以他們將被選中。 – epascarello

+0

mmmm ..現在試了一下,沒有改變。 (編輯,謝謝) – yossi

+1

當值改變時,屬性不會改變。 http://jsfiddle.net/9Jg86/ – epascarello

回答

2

您正在查看value屬性。您可以關閉value屬性的過濾器來代替:

http://jsfiddle.net/Y2P6w/

var $filledElems = $("[name*='data\\[Filter\\]']").filter(function() { 
    return $.trim(this.value).length; 
}); 
+0

而價值屬性不是看待的地方,因爲......? – yossi

+1

當某人在字段中輸入內容時,或者使用'.val()'或'.value'指定新值時,value屬性不會改變。它的值_property_發生了變化。另外,正如epascarello剛剛評論過的,你的元素甚至沒有值屬性。 –

+0

太棒了,現在它被理解了。謝謝! – yossi

1

當輸入標籤被插入到頁面的一點是,無論是在頁面加載或動態的JavaScript代碼,如果它具有值屬性,那麼您的選擇器查詢將使用它,或者如果使用JavaScript中的setAttribute或jQuery中的.attr()更改輸入值,它們的值屬性實際上會發生變化,但是如果在JavaScript中使用.value或使用jQuery中的.val()或將頁面中的值更改爲文本框,該屬性不會更改,因此最好不要使用值選擇器中的值屬性,因爲它們不可靠,取而代之的是使用$("[name*='data\\[Filter\\]']")並按@JasonP指出的過濾它。