2

我正在尝试从多个输入中删除禁用属性,除了那些具有特定值的数据属性的输入。

如果我直接在 html 中设置数据属性,一切正常,但如果我在 dom 中动态设置,它会停止工作。

js:

$("input[name='title']").data("notallow", 0);
$("input[name='cod']").data("notallow", 0);

console.log($("input[name='cod']").data()); // data is seted

$("body").on("click", "button", function(){
    $("input").not("[data-notallow='0']").attr("disabled", false);
});

jsfiddle

我错过了什么?

4

2 回答 2

2

当您使用 时data,您不会动态地为 HTML 设置属性,jQuery 实际上会使用您刚刚设置的新属性更新元素的“数据存储”。

所以如果你想让它notallow可用于“查询”,你不应该使用.data()(甚至.prop())。您应该使用.attr(),这是实际创建属性的函数:

$("input[name='title']").attr("data-notallow", 0);
$("input[name='cod']").attr("data-notallow", 0);

你的小提琴,更新,在这里

注意:同样的方式,您应该使用.prop()而不是.attr()启用/禁用。

注2:.data()数据存储真的很强大:你甚至可以存储对象。考虑到这一点,至少对我来说,更清楚为什么.data()函数没有真正创建 DOMdata-属性(如何存储对象?)。

于 2013-09-30T13:59:19.660 回答
2

@acdcjunior 总结得很好。但是,您仍然可以过滤data存储在 jQuery$.cache中的内容(如在您使用该data()方法的示例中):

$('input').filter(function(i, el){
    return $(el).data('notallow') !== 0;
}).prop({ disabled: false });

http://jsfiddle.net/xvwMc/3/

于 2013-09-30T14:02:17.793 回答