【问题标题】:JQuery attribute (empty) value selector, not workingJQuery 属性(空)值选择器,不起作用
【发布时间】:2014-03-28 03:04:03
【问题描述】:

元素和代码。

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());

问题:即使它们都是空的,它们也是序列化的。
为什么?

【问题讨论】:

  • 那么您的元素没有值为“”的属性值,因此它们将被选中。
  • mmmm.. 试过了,没变。 (已编辑,谢谢)
  • 那么当值改变时,属性不会改变。 jsfiddle.net/9Jg86

标签: javascript jquery html jquery-selectors forms


【解决方案1】:

您正在查看 value 属性。您可以过滤掉 value 属性:

http://jsfiddle.net/Y2P6w/

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

【讨论】:

  • 而且value属性不是要看的地方,因为……?
  • 当有人在字段中键入或使用.val().value 分配新值时,值属性不会改变。改变的是 property 的值。此外,正如 epascarello 刚刚评论的那样,您的元素甚至没有 value 属性。
【解决方案2】:

关键是当输入标签被插入页面时,无论它是在页面加载中还是在您的动态 JavaScript 代码中,如果它具有您的选择器查询将使用它的 value 属性,或者您是否更改了输入的值在 JavaScript 中使用 setAttribute 或在 jQuery 中使用 .attr(),它们的 value 属性实际上会被更改,但是如果您在 JavaScript 中使用 .value 或在 jQuery 中使用 .val() 更改它,或者只是将页面中的值更改为文本框,属性不会改变,所以你最好不要在选择器中使用值属性,因为它们不可靠,而是使用$("[name*='data\\[Filter\\]']") 并按照@JasonP 指出的那样过滤它。

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 2019-09-08
    • 2011-08-29
    • 2019-10-06
    • 2015-05-13
    • 2017-05-21
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多