0

我一直在开/关删除我不想的事件处理程序时遇到问题,并且希望使用 html 元素的 expando id 命名事件绑定。

function SomeWidget(el) {
   $(document).on('handler.MY_EXPANDO_ID', this.handler.bind(this));
};
var widget = new SomeWidget($(sometargetelement));

没有唯一标识符的问题是,目前我有相同的命名空间,当我同时有两个小部件时,它搞砸了,一个被删除,它删除了两个对象的处理程序。

问题 1) 如何访问元素的内部 expando id?问题2)有没有更好的方法来做到这一点?Function.bind !== 函数,这使得无法根据实际方法指针进行删除

我正在使用 jQuery 1.8.3

4

1 回答 1

1

每当创建一个小部件时,jQuery UI 的小部件工厂就会增加一个计数器。然后他们有一个eventNamespace可用的属性正是这个原因。您可以完成相同类型的事情:

function SomeWidget(el) {
    SomeWidget.instances++;
    var eventNamespace = ".SomeWidget" + SomeWidget.instances;

    $(el).on("handler" + eventNamespace, ...);
}
SomeWidget.instances = 0;

这将在创建新实例时增加实例SomeWidget。在内部,它将可以访问eventNamespace可用于绑定/解除绑定事件的一个。

如果您需要在小部件之外进行访问,则可以将eventNamespaceas 数据存储在元素上:

$(el).data("eventNamespace", eventNamespace);

但是,如果您使用相同的元素创建了多个小部件实例,这将被覆盖。

于 2012-12-28T20:15:54.907 回答