我正在尝试从多个输入中删除禁用属性,但具有特定值的数据属性的输入除外。
如果我直接在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);
});
我缺少什么?
答案 0 :(得分:2)
当您使用data
时,您没有动态地为HTML设置属性,jQuery实际上使用您刚设置的新属性更新元素的“数据存储”。
因此,如果您想让notallow
可用于“查询”,则不应使用.data()
(甚至.prop()
)。您应该使用.attr()
,这是实际创建属性的函数:
$("input[name='title']").attr("data-notallow", 0);
$("input[name='cod']").attr("data-notallow", 0);
你的小提琴,更新,here。
注意:同样,您应该使用.prop()
代替.attr()
来启用/停用。
注2:数据存储.data()
非常强大:您甚至可以存储对象。考虑到这一点,至少对我而言,更清楚地说明为什么.data()
函数没有真正创建DOM data-
属性(如何存储对象?)。
答案 1 :(得分:2)
@accciorior总结得很好。但是,您仍然可以对存储在jQuery data
中的$.cache
进行过滤(例如,在使用data()
方法的示例中):
$('input').filter(function(i, el){
return $(el).data('notallow') !== 0;
}).prop({ disabled: false });