【问题标题】:Unbind expand JQuery Mobile Collapse解除绑定 expand JQuery Mobile 折叠
【发布时间】:2013-06-13 16:02:54
【问题描述】:

我正在使用 JQuery Mobile Accordion 列表

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

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

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

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

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

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

JS Fiddle 示例:http://jsfiddle.net/6txWy/1658/

【问题讨论】:

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


【解决方案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。街区里有一个叫on 的新孩子,在很多方面都比bind 好得多。

【讨论】:

    猜你喜欢
    • 2012-01-14
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多