【问题标题】:jquery $.getJSON repeats X timesjquery $.getJSON 重复 X 次
【发布时间】:2011-07-13 16:35:29
【问题描述】:

我无法在 jsbin 中重新创建问题而没有提供特定于项目的详细信息(我正在使用 API 中的 JSON),但我遇到了一个似乎无法解决的问题,并且非常感谢任何帮助或见解。

我从以下标记开始:

我有一个空白的无序列表。

<ul id="results-list">
  <!-- it is blank for now, and will be populated via jQuery -->
</ul>

还有一个输入。

提交该输入后,我会根据 JSON 响应运行一些代码以使用数据填充 #results-list。一切都好。在该数据群中,我嵌入了无处可去的链接,使其类似于侧边栏导航(用户单击链接,主要内容区域的内容会相应更改)。这第一次运行良好。

然后,我在 .live() 内部运行了一个匿名函数,用于单击 #results-list 中的这些链接。

$("#results-list a").live('click', function(){
    // populate the main content area with the correct information.
});

好的,这样第一次就完美了。一旦用户更改了输入内容并重新提交表单,主内容区域中的所有项目都会相应更改,但其中有两个。如果他们再次重新提交表格,则有三个。以此类推。

因此,主要内容被重复 X 次,其中 X 是表单提交的次数。

我意识到这是一个有点模糊的问题,但我想看看是否有人对可能发生的事情有任何指示?这一切都发生在普通的$.getJSON 方法调用中。

有什么想法吗?

【问题讨论】:

  • 有没有机会在每次发帖后调用live 函数?
  • 您为自己诊断问题做了哪些工作?您是否检查了来自$.getJSON 电话的回复并确认您得到了您认为每次通话应该得到的结果?知道代码中的问题出在哪里会更容易修复它。
  • ……就是这样。我觉得非常愚蠢。谢谢格雷厄姆!如果您想让您的评论成为答案,我会投票并标记为正确!
  • 那么您是说取决于页面刷新了多少次,然后单击结果列表中的某个项目正在运行相同次数的填充函数?也许做 $("#results-list a").die();以确保没有事件已附加到这些列表项。
  • 大家好,感谢您发布 cmets!格雷厄姆提出了我在错误的位置设置实时功能的观点,并且修复了它。谢谢!

标签: javascript jquery google-chrome-extension


【解决方案1】:

如果您在每次发布后调用live 函数,jQuery 将继续向 DOM 添加事件处理程序,因此处理程序将被多次调用。为了解决这个问题,要么只调用一次 live 函数,或者如果你必须在每个帖子后设置事件处理程序,使用 unbind 然后使用 bind 函数(即 bind 或更具体的东西,如 @987654326 @)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多