0

我正在使用 JQuery Mobile Accordion 列表

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

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

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

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

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

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

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

4

1 回答 1

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这里是可折叠的)

演示:http://jsfiddle.net/hungerpain/6txWy/1661/

unbind附加功能 - 为什么 jQuery 在使用时会删除与可折叠关联的所有事件数据:可折叠不是原生的吗?它们是由 jQM 通过使用 toggleClass 制造的,它本身就在一个函数中,并作为click事件处理程序附加。(不完全是如何工作的,但你明白了要点)所以只要打电话给unbind你,你就是在摧毁一切

希望这可以帮助 :)

PS请考虑使用最新版本的 jQuery & jQuery mobile。街区里有一个新孩子,他的名字onbind很多方面都要好得多。

于 2013-06-13T17:44:51.580 回答