Javascript 为什么jQuery会多次触发单击事件
我这里有这个示例代码 如果您单击“创建”按钮3次,并且每次在确认中单击“是”,则每次单击都会多次触发警报,而不是仅触发一次 如果您单击“创建”按钮3次,每次单击“否”,第4次单击“是”,则会针对之前的每次单击而不是一次触发警报 这种行为对我来说似乎很奇怪,因为我希望每次单击都会触发一次警报。我必须使用.unbind()还是有更好的解决方案 有人能告诉我为什么会发生这种情况以及如何解决它吗Javascript 为什么jQuery会多次触发单击事件,javascript,jquery,html,Javascript,Jquery,Html,我这里有这个示例代码 如果您单击“创建”按钮3次,并且每次在确认中单击“是”,则每次单击都会多次触发警报,而不是仅触发一次 如果您单击“创建”按钮3次,每次单击“否”,第4次单击“是”,则会针对之前的每次单击而不是一次触发警报 这种行为对我来说似乎很奇怪,因为我希望每次单击都会触发一次警报。我必须使用.unbind()还是有更好的解决方案 有人能告诉我为什么会发生这种情况以及如何解决它吗 谢谢,因为您要多次绑定它。单击事件内的单击事件意味着每次单击时,新的单击事件将绑定到以前绑定的事件之上。除
谢谢,因为您要多次绑定它。单击事件内的单击事件意味着每次单击时,新的单击事件将绑定到以前绑定的事件之上。除非单击事件创建了元素,否则不要在单击事件中绑定单击事件。也不需要反复重新初始化模式
$(document).ready(function ($) {
$('#confirmCreateModal').modal({show: false});
$('#confirmCreateYes').click(function () {
$('#confirmCreateModal').modal('hide');
var test = "123";
alert(test);
console.log(test);
});
$('.creategene').click(function () {
$('#confirmCreateModal').modal('show');
});
});
将此添加到您的代码中:
$( "#confirmCreateYes").unbind( "click" );
像这样:
$(document).ready(function ($) {
$('.creategene').click(function () {
$('#confirmCreateModal').modal();
$('#confirmCreateYes').click(function () {
$('#confirmCreateModal').modal('hide');
var test = "123";
alert(test);
console.log(test);
$( "#confirmCreateYes").unbind( "click" );
});
});
}))
它将解除对事件的绑定,这样它就不会绑定到上一个事件的顶部。这允许事件仅在原始单击事件中触发
这不是一个好方法。它将解除绑定附着到元素的所有单击事件。我将把它留在这里以供学习之用。
像这样更改代码
$(document).ready(function ($) {
$('.creategene').click(function () {
$('#confirmCreateModal').modal();
});
$('#confirmCreateYes').click(function () {
$('#confirmCreateModal').modal('hide');
var test = "123";
alert(test);
console.log(test);
});
});
您不必绑定
$(“#confirmCreateYes”)。在每个按钮中单击。您也可以尝试此操作-
$("#confirmCreateYes").unbind().click(function() {
//Stuff
});
这是行不通的。如果选择此方法,则解除绑定需要在绑定之前,而不是在函数实现内部(?)。但出于多种原因,这仍然是一种糟糕的方法,第一个原因是,您盲目地解除与此项目相关的所有点击事件的绑定,而不一定只是问题中的一个。不,它放在@kylealonius放置的位置比放在其他任何地方都更有意义。它将在尽可能早的时候解除绑定。不过,进一步减少使用.one()
比使用.click()
更有意义,这样你甚至不必自己解开它。但你要知道,为什么要解开它呢?它只能在模态可见时触发。Robert关于解除所有单击事件的绑定是正确的。我没有想到这一点。我试图保留原来的设计。但是由于create yes按钮有一个ID,其他方法要好得多,因为click事件不会为任何其他元素触发。如果主click事件(.creategene)发生在knockoutjs click binding self.creategene=function(){}中,您将如何处理此问题?我会使用数据属性而不是javascript来完成此操作,然后绑定到关闭事件。不是关闭事件,只是“是”按钮。根本不需要初始化模式,也不需要单击事件来打开它。仅仅一个代码块并不能提供一个好的答案。请添加解释(为什么解决问题,错误在哪里等…)
$("#confirmCreateYes").unbind().click(function() {
//Stuff
});