如何在首次使用jQuery点击后停止函数传播

How to stop function propagation after first click with jQuery

本文关键字:传播 函数 jQuery      更新时间:2023-09-26

我有一些点击功能。。。整个操作很好,但如果我快速双击调用按钮,某些元素会生成两次。你能告诉我如何在第一次点击后停止函数传播吗?非常感谢帮助,这是我的代码:

$('#start_panel ul li').click(function(event){
    if($(this).hasClass('eng')){
       ...
    }
    else if($(this).hasClass('ger')){
       ...
    }
    else if($(this).hasClass('pln')){
       ...
    }
    event.stopPropagation();
});
var clicked = false;
$('#start_panel ul li').click(function(event){
   if (clicked) return;
   clicked = true;

或者使用一个函数(略有不同:现在每个li元素只会处理一次点击):

 $('#start_panel ul li').one('click', function(event){

试试这个:

var myClicker = function(event){
    var self = event.currentTarget;
    if($(self).hasClass('eng')){
       ...
    }
    else if($(self).hasClass('ger')){
       ...
    }
    else if($(self).hasClass('pln')){
       ...
    }
    $(self).one('click', myClicker);
});
$('#start_panel ul li').one('click', myClicker);
 var i=0;
$('#start_panel ul li').click(function(event){
 if(i==1){
  i=0;
 return false;
  }
if($(this).hasClass('eng')){
   ...
}
else if($(this).hasClass('ger')){
   ...
}
else if($(this).hasClass('pln')){
   ...
}
 i++;

 });

要清除以前的请求,请使用Stop(true,true)

$('#start_panel ul li').stop(true,true).click(function(event){
    if($(this).hasClass('eng')){
        ...
    }
    else if($(this).hasClass('ger')){
       ...
    }
    else if($(this).hasClass('pln')){
       ...
    }
    event.stopPropagation();
});

您可以在第一次点击后解除对点击事件的绑定:

$('#start_panel ul li').click(function(event){
    $(this).unbind('click'); 
    if($(this).hasClass('eng')){
       ...
    }
    else if($(this).hasClass('ger')){
       ...
    }
    else if($(this).hasClass('pln')){
       ...
    }
    event.stopPropagation();
});