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

时间:2013-07-08 13:45:51

标签: javascript javascript-events jquery

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

我认为这个问题可能会问类似的问题,但绑定changeData也不起作用 - jQuery data() and 'changeData' event

2 个答案:

答案 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);
});

FIDDLE DEMO

答案 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'参数,那么事件才会被触发。

相关问题