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 回答