设置jQuery.data()会触发事件吗?

我想知道是否调用$(".domElement").data("key", "newValue")会触发我能处理的事件吗? 我尝试过绑定change但是在设置数据时不会触发此操作。

我认为这个问题可能会问类似的东西,但绑定changeData也不起作用changeData data()和’changeData’事件 。

实际上你只是试图附加自定义事件,但你也必须触发它:

 $('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); }); 

FIDDLE DEMO

这是自动的,直到版本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’参数,那么事件才会被触发。