我正在禁用使用此功能的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使用类似处理程序堆栈的东西并执行顶级处理程序??
答案 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来说明它。