我在删除我不想要的事件处理程序时遇到了一些问题,我想用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
发布于 2012-12-29 04:15:55
每当创建小部件时,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);但是,如果您使用相同的元素创建了小部件的多个实例,则会覆盖这些内容。
https://stackoverflow.com/questions/14075117
复制相似问题