访问元素的内部expando id

时间:2012-12-28 20:05:43

标签: jquery

我一直在处理我不想要的开/关删除事件处理程序的问题,并希望使用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!== Function,它根据实际方法指针进行删除

我正在使用jQuery 1.8.3

1 个答案:

答案 0 :(得分:1)

每当创建窗口小部件时,jQuery UI的窗口小部件工厂都会递增计数器。然后他们有一个eventNamespace属性正是​​因为这个原因。你可以完成同样的事情:

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

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

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

如果您需要在窗口小部件外部进行访问,则可以将eventNamespace作为数据存储在元素中:

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

但是,如果您使用相同的元素创建窗口小部件的多个实例,则会覆盖此内容。