更改选择器后单击“不要触发”

时间:2012-08-12 10:15:01

标签: javascript jquery asp.net events selector

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

$(".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 后,点击其他点击事件。如何更改选择器以保持触发?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

这取决于点击(和大多数其他)事件从源元素通过其所有包含元素冒出的事实。因此,使用.on()语法绑定的处理程序,只要在{(1)}元素(在此示例中)发生单击,jQuery就会测试事件的源元素以查看它是否与选择器匹配第二个参数".like_cont" - 如果是,则调用该函数,否则不调用。

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

如果“{标准”处理程序与"a[name=like]"绑定,或与.click() 绑定而没有第二个参数,则事件直接绑定到匹配的元素事件绑定时的选择器 - 无论此类元素在事件发生时是否仍与该选择器匹配。 (这不是一件坏事 - 有时它正是你所需要的,而不是你现在的情况。)