元素&代码。
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());
问题:即使它们都是空的,也会被序列化 为什么呢?
答案 0 :(得分:2)
您正在查看value属性。您可以过滤掉value属性:
var $filledElems = $("[name*='data\\[Filter\\]']").filter(function () {
return $.trim(this.value).length;
});
答案 1 :(得分:1)
关键是当输入标记插入页面时,无论是在页面加载中还是在动态JavaScript代码中,如果它具有value属性,您的选择器查询将使用它或者如果您更改输入的值在JavaScript中使用setAttribute
或在jQuery中使用.attr()
,其值属性实际上会发生变化,但如果您在JavaScript中使用.value
或在jQuery中使用.val()
更改它,或者只是更改值在页面中作为文本框,属性不会改变,所以最好不要在选择器中使用值属性,因为它们不可靠,而是使用$("[name*='data\\[Filter\\]']")
并按@JasonP指出的那样过滤它。 / p>