Unbind扩展JQuery Mobile Collapse

时间:2013-06-13 16:02:54

标签: javascript jquery jquery-mobile jquery-mobile-listview

我正在使用JQuery Mobile Accordion列表

我正在使用(在我的pageshow听众中)扩展其中一个项目

$("#myListSection").bind("expand",function(){})

在我的应用中,页面来回切换。我有一个问题,即会创建多个“扩展”订阅,所以当我再次切换到列表时,我扩展一个部分时会调用多个函数。 因此,我想在离开页面时使用unbind方法来销毁监听器。

我遇到的问题是当我解除绑定事件然后尝试重新绑定时。

$("#myListSection").unbind("expand")
$("#myListSection").bind("expand")

基本上现在只有一个展开事件被触发(这很好),但是列表部分没有扩展......我认为解除绑定不仅仅是我的听众。

JS小提琴示例:http://jsfiddle.net/6txWy/1658/

1 个答案:

答案 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}}好。