0

我在网站上有一个锚点。当有人单击它时,我会在 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();
            });

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

4

2 回答 2

1

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

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

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

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

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

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

于 2012-08-12T11:24:14.943 回答
1

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

于 2012-08-12T10:18:54.603 回答