如果我错了,请纠正我,但在我看来,jQuery 事件处理与 javascript 事件处理完全分开。我知道 jQuery 和 javascript 事件处理程序本身的执行顺序是未定义的,但是是否可以假设所有 javascript 处理程序都将在 jQuery 处理程序之前执行?
In the example在对此的回答中给出question情况似乎确实如此。
另外,相对于绑定事件处理程序,执行内联 javascript 事件处理程序是否有任何偏好?
为了澄清起见,我问所有这些是因为我遇到了一个问题,我有一个内联事件处理程序onClick
事件的<a>
调用的元素submit()
封闭形式的方法。就在提交表单之前,我想动态添加一些隐藏的inputs
到表格。现在我正在这样做:
var preSubmit = function preSubmit()
{
// add inputs
}
var oldSubmit = form.submit;
form.submit = function newSubmit()
{
preSubmit();
oldSubmit.call(form, arguments);
}
但我真的想知道是否有一种更优雅的方式,我真的需要对此进行一些澄清。
我不确定规范,但我认为事件处理程序只是按照您定义的顺序排队。内联处理程序是在 DOM 节点中定义的,因此没有其他内容可以更早进行。
最优雅的方式是这样写all以一种不引人注目的方式处理你的 JavaScript,即将它与 HTML 分开(你似乎正在混合编程风格)。不管怎样,您可以通过附加一个来拦截表单提交onsubmit
处理程序的形式:
$("form").submit(function(){
// Do stuff
return true;
});
Update
我已经做了一些测试,当您在其他地方调用 DOM 的 Submit() 方法时,通过 jQuery 附加到表单的 onsubmit 处理程序似乎不会被触发。这是一个解决方法:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript"><!--
jQuery(function($){
$("a").each(function(i, a){
a.onclick = function(){ // Remove previous handlers
alert("I will no longer submit the form");
$(this).closest("form").submit();
};
});
$("form").submit(function(){
alert("I'll take care myself, thank you");
$("input[name=foo]").val("Another value");
return true;
});
});
//--></script>
</head>
<body>
<form action="" method="get">
<input type="text" name="foo" value="Default value">
<a href="javascript:;" onclick="document.forms[0].submit()">Submit form</a>
</form>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)