【问题标题】:Calling functions multiple times versus using livequery [closed]多次调用函数与使用 livequery [关闭]
【发布时间】:2011-09-19 03:35:07
【问题描述】:

你们中的许多人可能都遇到过这种情况。例如,您有一个 jQuery 淡入淡出效果,它会在鼠标悬停在链接上时触发。有时您会通过 ajax 在文档中添加新链接,因此您也需要对它们应用淡入淡出效果。

有两种可能:

  • 在 ajax 完成后再次调用 fade 函数
  • 您在初始 document.ready 函数中使用 livequery 之类的东西来对链接应用淡入淡出

你会选择哪种方法,为什么?

【问题讨论】:

    标签: javascript jquery jquery-events


    【解决方案1】:

    livequery 会增加不必要的开销,除非您无法访问添加动态元素的 javascript。

    如果您谈论的是触发淡入淡出的事件处理程序,那么您可以使用 jQuery 的 事件委托 功能 delegate()[docs] 方法 (首选) 或 @ 987654322@方法。

    如果您不是在谈论事件处理程序,那么我肯定会自己在 AJAX 请求的回调中应用代码。 livequery 很漂亮,但在我看来应该是绝对的最后手段。

    【讨论】:

    • 太快了!我只是添加了一个答案来指出委托方法
    【解决方案2】:

    jquery 有一个本地函数,不需要额外的插件就可以做到这一点。见$.live()

    编辑:此外,您的第一个选项对我来说似乎是代码异味。保持干燥并使用$.live()

    【讨论】:

    • 是的,但它只适用于点击事件和类似的东西。添加元素后,您无法运行函数,只有在该元素发生某些事情时才能运行..
    • 您能否更新您的原始帖子以提供更清晰的示例?你给的是简单的事件委托。
    • 是的,这是一个糟糕的例子 :) 好的,这是现实生活中的情况:页面上有一个 cmets 列表,以及一个 show more 链接,该链接会触发一个 ajax,从而获得更多 cmets。每条评论都有'rate down','rate up','reply'等内容......基本上是jQuery的东西,也需要应用于新的cmets。而且不是在特定事件上,而是在添加新的 cmets 时...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多