设置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’参数,那么事件才会被触发。