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

Click Not to Fire After Selector is Changed

本文关键字:选择器 单击      更新时间:2023-09-26

我在网站上有一个锚点。当有人点击它时,我会在 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喜欢,但另一个点击事件触发。如何更改选择器以保持射击?

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

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

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

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

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

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

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