【问题标题】:jQuery script works only oncejQuery 脚本只工作一次
【发布时间】:2013-08-25 16:55:33
【问题描述】:

我有小问题,脚本只能运行一次,之后我需要刷新页面才能删除喜欢的文章(脚本就是这样)。

$("a.fav_no").on('click', function () {
            var id = $(this).attr("id");
            $(this).load("{$homepage}/user_action.php?action=fav&id="+ id +"").addClass("fav_yes");
        });

$("a.fav_yes").on('click', function () {
            var id = $(this).attr("id");
            $(this).load("{$homepage}/user_action.php?action=remove_fav&id="+ id +"").removeClass("fav_yes");
        });

在控制台中,我在多次点击后获得文章(div)的 id(所以它很重要),但它什么也没做。所以我现在可以只收藏,要从收藏中删除,我需要刷新然后再次点击链接以从收藏中删除。

谢谢!

【问题讨论】:

    标签: javascript jquery jquery-load


    【解决方案1】:

    如果您使用 .on() 重载,该重载需要 3 个参数并在文档上调用。然后随着 UI 元素的出现和消失,事件将保持关联。无需每次都重新添加。

    $(document).on("click", "a.offsite", function(){ .....

    在此处查看 .on() 的描述。 http://api.jquery.com/live/

    【讨论】:

    • 我有另一个问题。如果为真(如果被收藏),您只能从收藏夹中删除,之后您将无法再次收藏。如果 where 是假的(不喜欢),一切都很好。这个问题是由于 jquery 还是 php 造成的? -谢谢
    【解决方案2】:

    如果您要替换负责捕获事件的 html, 你应该再次初始化那些事件捕获器。

    像这样:

    initEvents() {
         $("a.fav_no").on('click', function () {
            var id = $(this).attr("id");
            $(this).load("{$homepage}/user_action.php?action=fav&id="+ id +"").addClass("fav_yes");
        });
    
         $("a.fav_yes").on('click', function () {
            var id = $(this).attr("id");
            $(this).load("{$homepage}/user_action.php?action=remove_fav&id="+ id +"").removeClass("fav_yes");
        });
    
    }
    

    然后您在页面加载时调用 initEvents, 当 html 被替换时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多