【问题标题】:Click Not to Fire After Selector is Changed更改选择器后单击不触发
【发布时间】:2012-08-12 10:15:00
【问题描述】:

我在网站上有一个锚点。当有人单击它时,我会在 jquery 中执行 smth 并更改名称,但是当再次单击它时,会触发事件,尽管我已经更改了它的名称。 代码在这里:

$(".like_cont a[name=like]").click(function (e) {
                alert("W");
                var t = $(this);

                t.find("img").attr("src", "images/like_icon.png");

                var ls = parseInt(t.next().next()) + 1;
                t.next().next().text(ls);

                var params = "Like|" + t.attr("lik");
                CallServer(params, "");

                t.attr("name", "liked");
                e.preventDefault();
            });

在 Click name喜欢 之后,但另一个点击事件 Fire。如何更改选择器以保留触发?

【问题讨论】:

    标签: javascript jquery asp.net events selector


    【解决方案1】:

    一种可能的方法是调用.off() 从您的对象中删除点击事件。

    【讨论】:

      【解决方案2】:

      您可以调用.off() 根据 Iridio 的回答删除事件处理程序。

      或者您可以使用委托事件处理模型:

      $(".like_cont").on("click", "a[name=like]", function (e) {
          ...
      });
      

      这依赖于点击(和大多数其他)事件从源元素通过其所有包含元素冒泡的事实。因此,使用.on() 语法绑定的处理程序,每当(在此示例中)".like_cont" 元素上发生单击时,jQuery 测试事件的源元素以查看它是否与第二个参数中的选择器匹配, "a[name=like]" - 如果是,则调用该函数,否则不是。

      换句话说,使用委托处理模型,只有当点击的元素与第二个参数中的选择器匹配时,该函数才会被调用在事件发生时

      使用与.click() 绑定的“标准”处理程序,或与.on() 绑定没有第二个参数,事件直接绑定到匹配选择器的元素在事件被绑定时 - 无论这些元素在事件发生时是否仍然匹配该选择器。 (并不是说那是一件坏事——有时它正是你所需要的,只是在你目前的情况下不是。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        • 1970-01-01
        • 2015-12-29
        • 2015-09-29
        • 2017-12-23
        • 1970-01-01
        相关资源
        最近更新 更多