使用jQuery在DOM元素上设置change事件的处理程序

时间:2013-06-08 05:20:14

标签: jquery event-handling

我想在每次操作特定DOM元素时运行一个函数。

示例:

我操纵具有类data-expertize的元素的.milestones-chain属性:

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

我希望这能自动触发一个功能。

我试过了:

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

但它似乎不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:2)

Working jsFiddle Demo (版本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设置为元素来触发事件。顺便说一句,它不适用于jQuery 1.9和更高版本。


Working jsFiddle Demo (版本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]);
    };
})();

只需将其添加到脚本的第一行即可。