jquery
  • custom-data-attribute
  • 2013-09-30 27 views 2 likes 
    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

    我缺少什么?

    回答

    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-属性(如何存储对象?)。

    +0

    很高兴知道,谢谢。 +1 –

    2

    @acdcjunior总结得很好。但是,你仍然可以存储在jQuery的$.cache以及data过滤器(如在您的例子,其中使用了data()法):

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

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

    相关问题