【问题标题】:jQuery click event stops working after one clickjQuery click 事件在单击后停止工作
【发布时间】:2012-06-17 19:41:50
【问题描述】:

我有一个 div (#replyLoop),当点击它时,链接 ID lmor 会将内容从 href 元素 data-posts 拉入。第一次点击可以正常工作,但之后什么都不做。我怀疑它与代码的结构有关,而不是与使用的事件有关——“live”和“click”都具有相同的结果,删除 return false 也是如此;并且仅使用链接的 data-posts 元素并删除 href 部分。 (返回 false;禁用链接的 href 触发)。

在谈到 js 时,我似乎总是错过最明显的事情 - 我想知道这里是否是这种情况。

(tooltip-e 确保在加载新内容时调用 tipsy 函数。(工具提示))

“实时”标记 -

$(function(){
$("#lmor").live("click",function() {
    $('#replyLoop').load($(this).attr('data-posts'), function(data) {
            $('.tooltip-e').tipsy({
            gravity: 'e',
            fade: true,
            html: true
            });
        });
        return false;
    });
});

“点击”标记-

$(function(){
$("#lmor").click(function() {
    $('#replyLoop').load($(this).attr('data-posts'), function(data) {
            $('.tooltip-e').tipsy({
            gravity: 'e',
            fade: true,
            html: true
            });
        });
    return false;
    });
});

关于我缺少什么的任何想法?

编辑 我想通了 - 结合使用 .live 并在适当的文件中包含“加载更多”,我已经让它工作了。

问题:它在正在加载的页面之外被调用 - 因此,当它正在寻找“下一个”页面时,该“下一个”页面还没有被推送到链接,因为它没有知道它已被加载。

我还将实时代码标记为使用 's 而不是 "s。感谢您的帮助!

【问题讨论】:

  • .live() 已弃用,请使用 .on()
  • 而且您不应该将("#id")('#id') 混用,只使用' 用于javascript 和" 用于文本。
  • 显示的详细信息不足以识别问题。发布一些html。还可以在单​​击处理程序中尝试警报或 console.log() 以查看它是否正在触发
  • @AndreaTurri use just ' for javascript and " for text 是什么意思? :)
  • 页面上是否有超过 1 个“.tooltip-e”元素?你确定 Tipsy 只在一个元素上工作吗?

标签: jquery load click live


【解决方案1】:

如果我们不需要猜测会更容易回答,但这是我的猜测:#lmor 是否在第一次单击时加载到 #replyLoop 的 html 中?我猜是这样,问题是 $("#lmor").live 设置在 DOM 元素 #lmor 上,然后当您加载新内容时,您删除该 dom 元素并创建一个新元素。方法是:

$(document).on("click", "#lmor", function...);

这样,当您创建新的#lmor(加载新内容时)时,它也会获取事件监听器。

优化的版本可能是:

$("#replyLoop").on("click", "#lmor", function...);

如果#lmor 在#replyLoop 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2023-03-30
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多