2

我正在使用此功能禁用超链接,但我不太了解该功能的真正作用,我的疑问是下一个,我有这个功能:

function bindPrevent(e)
 {
    e.preventDefault();
    return false;
 }

当用户单击链接时,我会这样做:

function disableButton(f)
{
     if(f)
     {
    $('.btnOk[id!="link_lkDelete"]').each(function(){
            $(this).bind("click",bindPrevent);
        });
     }
     else
     {
    $('.btnOk[id!="link_lkDelete"]').each(function(){
            $(this).unbind("click",bindPrevent);

        });
      }
 }

问题是,如果链接有另一个点击处理程序,并且我绑定了一个新的处理程序,那么调用哪个处理程序??JQ 使用类似处理程序堆栈的东西并执行最上面的处理程序?

4

4 回答 4

2

问题是,如果链接有另一个点击处理程序,并且我绑定了一个新的处理程序,那么调用哪个处理程序??JQ 使用类似处理程序堆栈的东西并执行最上面的处理程序?

简短的回答是它们都被调用。他们将按照分配的顺序被调用。

在皮下,jQuery 简单地使用 javascripts 的默认事件附加机制,并稍加调整以确保它在所有浏览器中都能正常工作。

于 2012-05-03T15:56:27.913 回答
2

jquery 执行与事件相关的所有处理程序。

这是一个非常好的解释http://jqfundamentals.com/#chapter-5

通过使用 preventDefault 您正在阻止事件执行其默认操作,在这种情况下,遵循超链接

于 2012-05-03T15:59:15.713 回答
1

首先,我建议使用 .on() 而不是 .bind(),因为 .on 旨在替换所有绑定方法(bind、live 等)

据我所知,bind 的作用是监视一个事件(例如“click”或“mouseenter”),然后在它发生时执行附加到它的任何函数。

此外,如果您使用 return false; 你不应该需要 preventDefault(); 因为 return false 既充当 preventDefault 又充当 stopPropagation。

您也可以将以上内容写为:

function disableButton(f)
{
     if(f)
$('.btnOk[id!="link_lkDelete"]').click(function(){
            return false;
        });
 }
于 2012-05-03T16:03:59.773 回答
1

就像其他人所说的那样,两个处理程序都将被调用。这是一个说明它 的小提琴。

于 2012-05-03T16:04:07.860 回答