我用JavaScript编写了一个模板解析器。它将"项目"呈现到日历中,并附加一个单击处理程序。单击项目容器时,它将开始在其他窗口中加载项目内容。到目前为止还不错。但在某一点上,我需要覆盖这个点击处理程序,并将其替换为另一个。一开始听起来很简单,但我的程序混合使用了推送和轮询服务,并且项目必须每分钟渲染几次(至少在第一次迭代中,它将被完全替换)。
普通的点击处理程序是使用jQuery的click()
方法添加的。特殊的点击处理程序是使用jQuery的on()
方法添加的,因为所有项目都必须可以使用这个新的处理程序点击。现在,每次重新渲染项目时,都会在添加on
的处理程序之前附加并执行单击处理程序:(
我可以在模板器上设置一个标志,这样他就可以决定应该向项目中添加哪个处理程序,但这会干扰我们正在使用的程序范式,其中每个模块必须是完全可执行的,而不与其他模块交互。
有什么建议吗?我可以优先安排处理程序吗?
您可以在绑定新的点击手之前删除以前的点击手。
$yourObject.off('click');
.on('click', function(event){
//do sth
});
http://api.jquery.com/off/
如果您有多次单击,并且只想解除其中一些绑定,请使用事件名称空间。
绑定:
$yourObject.on('click.module-name');
取消绑定命名空间中的仅点击事件处理程序:
$yourObject.off('click.module-name');
从命名空间取消绑定所有事件处理程序:
$yourObject.off('.module-name');