【问题标题】:Waiting on JQuery to finish .live() or .bind() bindings?等待 JQuery 完成 .live() 或 .bind() 绑定?
【发布时间】:2010-08-12 16:29:47
【问题描述】:

我有一个脚本,它通过 JQuery .live 或 .bind(尚未确定哪个)将点击事件处理程序添加到页面中的大约 500 个元素,并且我遇到了 JQuery 性能问题。

使用一个小数据集,我可以加载页面,一旦页面根据浏览器完成加载,我可以点击一些东西然后我们就走了。但是增加数据集,在页面加载结束和我的点击被处理之间有一个明确的延迟,我只能假设 JQuery 仍然在附加事件处理程序 - 点击被正确处理,所以我假设它排队然后处理。

有没有办法让 JQuery 在继续之前等待 .live() 完成,或者换句话说,如果有意义的话,同步处理它而不是异步处理它?这样我就可以在开始 .live() 调用之前放一个加载屏幕,并在完成后将其取下。

问候 哞哞

【问题讨论】:

    标签: jquery iphone web-applications bind live


    【解决方案1】:

    jQuery .live() 处理程序(或.delegate())应该非常快速完成,这与绑定每个元素的.bind() 不同。在这些情况下,您应该使用.live().delegate(),因为.bind() 的启动成本远远超过父元素上处理程序的事件冒泡/侦听成本。

    【讨论】:

    • 无论我使用 .bind 还是 .live,都会发生延迟,除了这些特定调用之外,我看不到任何其他延迟原因。基本上,我的应用程序在 $(document).ready 上启动,调用 $('.MenuItem').live(..... 然后坐在那里等待用户交互。使用少量测试数据,应用程序是立即可用,但增加了测试数据,我在处理第一次点击时得到了上述延迟。
    • @Moo - .live() 不会导致您的延迟,如果使用得当,则不会...一定有其他事情发生,live()document 上创建了一个事件处理程序,这就是字面意思全部都做了,除了绑定还有什么?
    • 此时?从字面上看什么都没有——应用程序的整个其余部分都依赖于这些绑定的点击事件,没有进行 dom 操作,没有动画,在点击发生之前什么都没有。
    • @Moo - 你能给我一个链接吗?可以快速查看一下,看看是否有什么奇怪的地方我注意到了
    • 不公开,你有我可以发给你的邮箱吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多