我想知道对$(".domElement").data("key", "newValue")
的调用是否会触发我可以处理的事件?我已尝试绑定change
,但在设置数据时不会触发。
我认为这个问题可能会问类似的问题,但绑定changeData
也不起作用 - jQuery data() and 'changeData' event。
答案 0 :(得分:12)
实际上你只是试图附加自定义事件,但你也必须触发它:
$('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 :(得分:3)
这是自动的,直到version 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'参数,那么事件才会被触发。