Javascript 如何防止在Jquery中多次调用函数
我有以下代码:Javascript 如何防止在Jquery中多次调用函数,javascript,jquery,Javascript,Jquery,我有以下代码: $('#main-button').click(function(){ $('#button').click(function(){ alert('something'); }); }); 每当我点击主按钮,比如说3次,然后点击按钮,就会出现3个弹出框。如何防止这种情况发生,因此无论主按钮被单击多少次,当按钮被单击时,只会出现一个弹出框?使用jQuery,或者解释您试图执行的操作,可能会有更好的解决方案 $('#main-button').cl
$('#main-button').click(function(){
$('#button').click(function(){
alert('something');
});
});
每当我点击主按钮,比如说3次,然后点击按钮,就会出现3个弹出框。如何防止这种情况发生,因此无论主按钮被单击多少次,当按钮被单击时,只会出现一个弹出框?使用jQuery,或者解释您试图执行的操作,可能会有更好的解决方案
$('#main-button').click(function(){
$('#button').one('click',function(){
alert('something');
});
});
例如,如果您的issue is like按钮仅在单击主按钮时出现,则使用jquery在适当级别使用委派。我使用的是来自文档的委派,因为您的示例不清楚
$('#main-button').click(function(){
});
$(document).on('click','#button',function(){
alert('something');
});
如果只想为按钮单击显示弹出窗口,为什么要将按钮单击功能放在主按钮单击功能的内部 你可以单独使用它们
$('#main-button').click(function(){
});
$('#button').click(function(){
alert('something');
});
要么写:
$('#button').click(function(){
alert('something');
return false;
});
或者
我希望它能有所帮助。一个简单的解决方案是在按钮外设置一个变量,然后在第一次单击时更改该值
var clicked = 0;
$('#button').click(function(){
if(clicked === 0) {
alert('something');
clicked = 1;
}
});
解决方案就在那里。每次单击主按钮时,主按钮的事件处理程序都会将一个单击处理程序分配给另一个按钮。因此,您会收到X个警报 两种可能的快速修复方法,都不优雅,但只是为了告诉您哪里出了问题:
var isAssigned = false;
$('#main-button').click(function(){
if (!isAssigned) {
$('#button').click(function(){
alert('something');
});
}
isAssigned = true;
});
或
或者您可以使用以下代码:
$('#main-button').click(function(){
$('#button').unbind("click").click(function(){
alert('something');
});
});
更新1
从jQuery 1.7开始,取消绑定已被弃用。改用关闭方法。War10ck:
没错,
有更新的代码和小提琴
最好的解决方案是在单击链接时取消绑定click事件
$(function() {
$('#link').on('click', function() {
if (!$(this).data('processing')) {
$(this).data('processing', true);
alert('A was clicked!!');
$(this).data('processing', false);
}
});
});
这就是您告诉它要做的-每次单击主按钮时,向按钮添加另一个事件处理程序…当您单击主按钮时,会将事件处理程序附加到按钮。如果您单击主按钮三次,您将在按钮上附加三个处理程序。这就是为什么会出现3警报。可以通过声明全局布尔值来防止这种情况。单击主按钮时,检查布尔值是否设置为true。如果不是,则附加处理程序并将布尔值设置为true。下一次单击主按钮不会向您的按钮添加新的处理程序,我假设第一次单击显示一个弹出窗口,第二次单击在弹出窗口中,所以两次单击始终在工作流中完成。如果不是这样的话,我已经提供了第二种解决方案。You's fiddle只在第一次点击链接时起作用。警报只显示一次,因为您立即解除了它的绑定。
$('#main-button').click(function(){
$('#button').unbind("click").click(function(){
alert('something');
});
});
$(function() {
$('#link').on('click', function() {
if (!$(this).data('processing')) {
$(this).data('processing', true);
alert('A was clicked!!');
$(this).data('processing', false);
}
});
});