2

特定の DOM 要素が操作されるたびに関数を実行したいと考えています。

例:

data-expertizeクラスを持つ要素の属性を操作します.milestones-chain:

$(".milestones-chain").data("expertizes","<%= @challenge.root.expertizes %>");

これで関数を自動的にトリガーしたいと思います。

私はこれを試しました:

$(document).on('change','.milestones-chain', function() {
    alert("trigger my function");
});

しかし、うまくいかないようです。私は何をすべきか?

4

1 に答える 1

2

動作中の jsFiddle デモ(バージョン 1.8.3)

jQuery 1.9 より前では、以下を操作するためのイベント ハンドラーがありますdata

  • setData- データを設定するたびに発生
  • getData- データを取得するたびに発火

ただし、jQuery サイトにはドキュメントがなく、jQuery 1.9 から削除されています。

$(function () {
    $('.milestones-chain').on('setData', function (e, k, v) {
        alert('[CHANGED] ' + k + ' : ' + v);
    });

    $('.milestones-chain').data('expertizes', '12345');
});

このコードを jQuery 1.8 で実行すると、alert. data要素にa を設定することによって発生するイベント。ところで、jQuery 1.9 以降では動作しません。


動作中の jsFiddle デモ(バージョン 1.10.1)

この機能を新しいバージョンの jQuery に戻すことができます。
(私はこの質問からそれを取ります: JQuery 1.9 not triggering setData event )。

(function () {
    var olddata = $.fn.data;
    $.fn.data = function (key, value) {
        olddata.call(this, arguments);
        if (value !== undefined) $(this).trigger('setData', [key, value]);
    };
})();

スクリプトの最初の行に追加するだけです。

于 2013-06-08T05:44:27.563 に答える