【问题标题】:How to write a delegated .on( "click"如何编写委托的 .on("click"
【发布时间】:2014-08-06 11:07:36
【问题描述】:

我有将被创建和销毁的按钮。我在下面有这段代码。 #showContainer 是ajax'ing,click 是action,showPrevious 是用户交互的按钮。

$("#showContainer").on( "click", "#showPrevious", function()
{
    $.ajax(
    {
        url: "flip/showprevious.php",
        cache: false,
        success: function(html)
        {
            $("#showContainer").html(html);
        }
    });
});

这是根据 jsHint 的有效 JavaScript。添加这个后,这个和它下面的所有代码行都不起作用。我的 cPanel 和 WAMP 服务器没有显示任何错误。我已经详尽地阅读了关于 .on() 的 jQuery 文档。

疑难解答 我尝试将 .on() 附加到加载时页面上已经存在的几个不同的可能父元素。我尝试将 .on() 附加到其他按钮,以查看按钮是否有问题,但这也没有奏效。我认为这可能与我正在重新创建曾经存在的东西并且它混淆了我的代码这一事实有关。我尝试将 id 更改为 class 并将 # 更改为 . accoridingly,但这也没有奏效。无论如何,这些都不应该破坏javascript代码。我确定这是我在这里分享的代码。当我将其注释掉时,其他一切都按预期工作。

注意事项。我使用的是 .click(),它适用于第一次单击,但在单击之后,会重新创建 showPrevious 按钮,并且 .click() 将不再起作用,因为加载时新的 showPrevious 不在页面上。

总结嗯,这就是我掌握的所有信息。我无法想象其余的代码是相关的,但如果是,请告诉我要查找的内容。

【问题讨论】:

  • 代码看起来不错,应该可以工作。我们能帮你的不多!您使用的是什么版本的 jQuery,您检查控制台是否有错误等?
  • 你能给你看 HTML 吗?
  • 一种可能性是,一旦内容被修改,没有id为showPrevious的元素...也可以试试$(document).on( "click", "#showPrevious", function(){})
  • 一旦 ajax 完成...在你的控制台尝试$("#showPrevious").length
  • 承认这感觉很糟糕,但 adeneo 是对的。我有一个非常旧版本的 jquery。我很震惊,直到现在我才注意到。当我开始时,我必须从教程中得到它,并且从没有问题到现在一直在重复使用它。非常感谢。这已经进行了许多小时的斗争。

标签: javascript php jquery ajax delegates


【解决方案1】:

应该是这样的:

$(document).on("click","#showContainer #showPrevious", function()
{
    $.ajax(
    {
        url: "flip/showprevious.php",
        cache: false,
        success: function(html)
        {
            $("#showContainer").html(html);
        }
    });
});

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 2013-06-10
    • 1970-01-01
    • 2012-10-24
    • 2011-12-28
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多