在jQuery的click()方法中,处理器(handler)是否总是同步调用?

4

经过简短的测试,似乎click()将同步触发任何适用的处理程序(也就是说,在click()返回之前,所有处理程序都会被调用),这对我正在开发的内容非常有用。然而,jQuery文档似乎没有保证(没有提到其中一种方式或另一种方式)处理程序是同步调用的。

是否在某个地方保证了同步行为,或者可以安全地假定为跨浏览器和未来可靠的行为?

1个回答

4

是的,在幕后,所有的点击事件都会在正常的默认功能启动之前同步运行。一个可以看到这一点的方法是向锚标签添加一个或多个click事件。如果任何一个附加的函数返回false,则会取消锚标签的默认功能。换句话说,您不会跳转到href属性中的页面。

$("a:first")
    .click(function() { alert("I was attached first!"); return false; })
    .click(function() { alert("Running despite the earlier 'return false'!");});

您会注意到它们同步运行,按照附加的顺序运行!任何一个附加的函数都可以返回false来取消锚标签的正常重定向。

使用jQuery触发click事件时,所有附加的函数将在执行其余链接操作之前运行。

$("a:first")
    .click(function() { alert("I was attached first!"); return false; })
    .click(function() { alert("Running despite the earlier 'return false'!");});
$("a:first").click().css("color", "red");

所以,上述代码将始终显示两个警报,然后将链接颜色更改为红色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接