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

@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 に答える
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()関数が実際に DOM 属性を作成しない理由data-(オブジェクトをどのように格納するのでしょうか?) がより明確になります。

于 2013-09-30T13:59:19.660 に答える