关于(内联)javascript事件处理程序的jquery事件处理程序的执行顺序
如果我错了,请纠正我,但在我看来,jQuery事件处理与javascript事件处理完全分开。 我知道执行jQuery和javascript事件处理程序本身的顺序是未定义的,但可以假设所有javascript处理程序将在jQuery之前执行吗?
在这个问题的答案中给出的例子似乎就是这种情况。
此外,是否有任何关于绑定的内联javascript事件处理程序的首选项?
为了澄清,我问这一切是因为我遇到了一个问题,我在一个元素的
onClick
事件上有一个内联事件处理程序,它调用一个封闭forms的submit()
方法。 在提交表单之前,我想动态地向表单添加一些隐藏的inputs
。 现在我这样做:
var preSubmit = function preSubmit() { // add inputs } var oldSubmit = form.submit; form.submit = function newSubmit() { preSubmit(); oldSubmit.call(form, arguments); }
但我真的很想知道是否有更优雅的方式,我真的需要对此进行一些澄清。
我不确定规格,但我认为事件处理程序的排队顺序与您定义它们的顺序相同。 内联处理程序在DOM节点中定义,因此没有其他任何内容可以提前。
最优雅的方式是以不引人注目的方式编写所有 JavaScript,即将它与HTML分开(您似乎混合编程样式)。 无论如何,您可以通过将onsubmit
处理程序附加到表单来拦截表单提交:
$("form").submit(function(){ // Do stuff return true; });
更新
我做了一些测试,看起来当你在其他地方调用DOM的submit()方法时,通过jQuery附加到表单的onsubmit处理程序不会被触发。 这是一个解决方法:
有两种解决方案:包装表单的提交function或链接的onClick处理程序。 我不知道jQuery提供了“包装现有函数”API。
至于运行顺序,jQuery是JavaScript,因此处理程序在浏览器运行时运行。 这不是特定于jQuery的东西,除非API声明某些东西是异步运行的。
除了你的问题的细节,你可以添加一个onsubmit事件,它将在表单提交之前调用…