经过简短的测试,似乎click()
将同步触发任何适用的处理程序(也就是说,在click()
返回之前,所有处理程序都会被调用),这对我正在开发的内容非常有用。然而,jQuery文档似乎没有保证(没有提到其中一种方式或另一种方式)处理程序是同步调用的。
是否在某个地方保证了同步行为,或者可以安全地假定为跨浏览器和未来可靠的行为?
经过简短的测试,似乎click()
将同步触发任何适用的处理程序(也就是说,在click()
返回之前,所有处理程序都会被调用),这对我正在开发的内容非常有用。然而,jQuery文档似乎没有保证(没有提到其中一种方式或另一种方式)处理程序是同步调用的。
是否在某个地方保证了同步行为,或者可以安全地假定为跨浏览器和未来可靠的行为?
是的,在幕后,所有的点击事件都会在正常的默认功能启动之前同步运行。一个可以看到这一点的方法是向锚标签添加一个或多个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");