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 が何をするのか完全にはわかりませんが、2 番目の 'newValue' 引数を渡した場合にのみイベントが発生するように見えます (そしてテストで確認されました)。

于 2014-04-25T11:39:10.777 に答える