我正在使用JQuery Mobile Accordion列表
我正在使用(在我的pageshow
听众中)扩展其中一个项目
$("#myListSection").bind("expand",function(){})
在我的应用中,页面来回切换。我有一个问题,即会创建多个“扩展”订阅,所以当我再次切换到列表时,我扩展一个部分时会调用多个函数。
因此,我想在离开页面时使用unbind
方法来销毁监听器。
我遇到的问题是当我解除绑定事件然后尝试重新绑定时。
$("#myListSection").unbind("expand")
$("#myListSection").bind("expand")
基本上现在只有一个展开事件被触发(这很好),但是列表部分没有扩展......我认为解除绑定不仅仅是我的听众。
JS小提琴示例:http://jsfiddle.net/6txWy/1658/
答案 0 :(得分:1)
简单。将要执行的函数设置为单独的函数,如下所示:
function expand() {..}
function collapse() {..}
然后你的事件处理程序必须是这样的:
$('#my-collaspible').bind({
'expand': expand,
'collapse': collapse
});
我更喜欢传递这样的函数,因为它使我的代码干净且易于理解。 那么,让我们来看看主要部分。不要只使用unbind
并删除与可折叠关联的所有功能,而是使用unbind
和之前绑定它的功能,使用$(this).unbind('expand', expand);
:
expand
其中第二个collapsible
是您传递的匿名函数。稍后,在需要时,expand()
可以像这样绑定回$(this).bind('expand', expand);
。 (再次)
this
(假设unbind
是可折叠的)
演示: http://jsfiddle.net/hungerpain/6txWy/1661/
额外内容 - 为什么jQuery会在使用click
时删除与可折叠关联的所有事件数据:可折叠程序不是原生的吗?它们是由jQM使用toggleClass编写的,它本身就是一个函数,并作为unbind
事件处理程序附加。 (并不是完全如何运作,但你得到了要点)所以通过调用on
你正在摧毁一切。
希望这会有所帮助:)
PS 请考虑使用最新版本的jQuery& jQuery移动。在名为bind
的区块中有一个新的孩子,在很多方面远比{{1}}好。