javascript - 我无法攻击具有动态类的项目上的 Onclick

标签 javascript jquery event-bubbling

我使用两次验证来确保用户确实想要删除该项目。

<span class="addvalidationmsg" data-actionresult="DeleteInstallation">CLICK ME</span>

首先,当用户单击项目时,我替换类并更改消息,并且没有 POST,只是在 DOM 上进行更改:

$(".addvalidationmsg").click(function () {
                // remove validation message
                $(this).removeClass("addvalidationmsg");
                // add ajaxcall
                $(this).addClass("ajaxcall");
                // add text
                $(this).text("are you sure? Click again");

                return false;
            });

然后,当我第二次单击时,由于新的类,它启动了这个:

$(document).on("click", ".ajaxcall", function () {
                alert("POST");
            });
    });

问题是我只想在第二次单击时启动 POST。如果我在第一个函数上返回 false,则此后不会发生任何事情,如果我删除它,它会启动 POST 两次(每次点击一次)

如果我删除则返回 false;在第一个函数上,然后当用户第一次按下该项目时调用第二个函数(为什么又)?

如何实现这一点?

一点JSFIDDLE

提前致谢

最佳答案

问题在于您将单击事件静态绑定(bind)到使用类选择器找到的元素。如果稍后删除该类也没关系,因为处理程序已经绑定(bind)到该元素。

更改为委托(delegate)事件处理程序。然后将其绑定(bind)到祖先元素:

$(document).on('click', ".addvalidationmsg", function () {

由于 jQuery 选择器仅在事件时间运行,而不是事件注册时间,因此当类被删除时它将不再匹配并且事件将不再开火

JSFiddle: http://jsfiddle.net/TrueBlueAussie/2xaa26yr/2/

注意:我必须放入 console.log,因为重复点击不“可见”:)

第二个问题"is"返回 false 停止事件传播,但这也随着上面的代码而消失。

如果您从未打算重新启用该按钮,另一种选择是使用one。这只会触发事件一次......永远:

$(".addvalidationmsg").one('click', function () {

JSFiddle:http://jsfiddle.net/TrueBlueAussie/2xaa26yr/3/

关于javascript - 我无法攻击具有动态类的项目上的 Onclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304023/

相关文章:

javascript - 主干事件多次触发

javascript - 我们将如何衡量调用 e.stopPropagation() 是否更高效?

javascript - Jquery Ajax。使用 tampermonkey 发送带有输入值的帖子

jquery - 如何在 Google Chrome 的 Greasemonkey 脚本中使用 jQuery?

javascript - 如何编写 onclick 函数以防止冒泡

javascript - 单击按钮时的进度条

javascript - AngularJS ng-click 突然停止工作

javascript - 如何使用 PhoneGap 保存网页供离线使用?

javascript - jquery CDOE 为什么只适用于第一项?

javascript - getAttribute() 不检索禁用的原始值