4

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

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

4

2 回答 2

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

小提琴演示

于 2013-07-08T14:01:04.393 回答
3

它是自动的,直到版本 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”参数时才会触发该事件。

于 2014-04-25T11:39:10.777 回答