理解.bind()JQuery

时间:2012-05-03 15:49:46

标签: jquery

我正在禁用使用此功能的hiperlink,但我真的不明白该功能到底是什么,我怀疑是下一个,我有这个功能:

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 个答案:

答案 0 :(得分:2)

  

问题是,如果链接有另一个单击处理程序,并且我绑定一个新的,然后调用哪个处理程序??,JQ使用类似处理程序堆栈的东西并执行前一个处理程序?

简短的回答是他们都被召唤了。他们将按照他们被分配的顺序被召唤。

在皮肤下,jQuery只使用javascripts默认机制进行事件附件,并进行一些修改以确保它适用于所有浏览器。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分: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;
        });
 }

答案 3 :(得分:1)

就像其他人所说的那样,两个处理程序都会被调用。这是一个fiddle来说明它。