我想知道调用是否$(".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 做了什么,但在我看来(并且测试已确认)只有在您传递了第二个“newValue”参数时才会触发该事件。