$(".domElement").data("key", "newValue")
への呼び出しが処理できるイベントをトリガーするかどうか疑問に思っていますか? バインディングを試みましchange
たが、データが設定されているときにトリガーされません。
この質問は似たようなことを尋ねているのではないかと思いますが、バインディングchangeData
も機能しませんでした - jQuery data() と 'changeData' event。
$(".domElement").data("key", "newValue")
への呼び出しが処理できるイベントをトリガーするかどうか疑問に思っていますか? バインディングを試みましchange
たが、データが設定されているときにトリガーされません。
この質問は似たようなことを尋ねているのではないかと思いますが、バインディングchangeData
も機能しませんでした - jQuery data() と 'changeData' event。
実際には、カスタム イベントをアタッチしようとしただけですが、次のようにトリガーする必要もあります。
$('button').click(function (e) {
$('#someID').data("key", "newValue").trigger('changeData');
});
$('#someID').on('changeData', function (e) {
alert('My Custom Event - Change Data Called! for ' + this.id);
});
バージョン 1.8.3までは自動でした('changeData' のソースを検索することによって決定されます)。
ただし、次のようにすると「changeData」がトリガーされるように記述されています。
$element.data('key', 'newValue');
ただし、次のようなオブジェクトを渡す場合はそうではありません:
$element.data({
'key': 'newValue'
});
これを説明するために編集されたソースの抜粋:
jQuery.fn.extend({
data: function( key, value ) {
// Gets all values
if ( key === undefined ) {
// expurgated
}
// Sets multiple values
if ( typeof key === "object" ) {
return this.each(function() {
jQuery.data( this, key );
});
}
return jQuery.access( this, function( value ) {
if ( value === undefined ) {
// expurgated
}
parts[1] = value;
this.each(function() {
var self = jQuery( this );
self.triggerHandler( "setData" + part, parts );
jQuery.data( this, key, value );
self.triggerHandler( "changeData" + part, parts );
});
},
}
});
jQuery.access が何をするのか完全にはわかりませんが、2 番目の 'newValue' 引数を渡した場合にのみイベントが発生するように見えます (そしてテストで確認されました)。