2009-04-14 35 views
20

我在写一个小小的jQuery扩展,它可以防止用户双击链接。在元素上停止进一步的事件处理程序

$.fn.preventDoubleClick = function() { 
    return this.click(function() { 
     var $t = $(this) 
      , retVal = $t.data('active') // check the internal flag 
     ; 
     if (retVal || retVal === undefined) { // if ON... 
      $t.data('active', false); // set the internal flag to OFF 
      setTimeout(function() { 
       $t.data('active', true); 
      }, 1000); // after 1 second, set the internal flag to ON 
      console.log("allowed"); 
      return true; 
     } else { // if OFF... 
      console.log("blocked"); 
      return false; 
     } 
    }); 
}; 

的问题是,如果有其他的单击事件处理程序上的元素,他们仍然火了:

$('#myLink').click(function() { 
    console.log("Clicked"); 
}); 
$('#myLink').preventDoubleClick(); 

而现在,当你双击链接,我在日志中得到这样的:

允许
点击
阻塞
点击

所以基本上,我需要preventDoubleClick中的点击函数来阻止所有其他事件处理程序的触发。我怎样才能做到这一点?

+1

此外,“preventDoubleClick”是一个误导性的名字,因为它不是被阻止 - 用户仍然双击 - 你只是阻止它发射事件,我认为... – James 2009-04-14 06:28:10

回答

6

我相信你正在寻找event.stopPropagation

编辑:原来这不是尼克的目的,正确的选项。请参阅his answer

+1

该页面上的文档说:“请注意,这将不会阻止同一元素上的其他处理程序运行。“ – nickf 2009-04-14 06:27:48

+0

是非常真实的,很高兴链接有帮助无论如何=) – 2009-04-14 06:39:29

相关问题