Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止在Jquery中多次调用函数_Javascript_Jquery - Fatal编程技术网

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);
        }
    });
});