我刚刚在不同的浏览器中测试了这种行为,所有浏览器都给出了相同的结果,这是我的结论:
<!-- submit button inside form -->
<form method="post">
<input type="submit" value="submit" /> <!-- onclick = submitted to same page -->
<input type="submit" value="submitNredirect" onclick="document.location.href='http://www.google.com';" /> <!-- onclick = submitted to same page, ignored redirect -->
</form>
<!-- submit button without form -->
<input type="submit" value="submit" /> <!-- onclick = no submit or redirect occur -->
<input type="submit" value="submitNredirect" onclick="document.location.href='http://www.google.com';" /> <!-- onclick = redirect -->
如您所知,javascript 是线性的,它执行首先出现的代码行。假设我们有这种形式:
<form id="myform" method="post" onsubmit="alert('onsubmit');">
<input id="mybtn" type="submit" value="submit" onclick="alert('onclick');" />
</form>
<script>
$(document).ready(function() {
$('#mybtn').bind('click', function() {
alert('bind click');
});
$('#myform').bind('submit', function() {
alert('bind submit');
});
// onclick > bind click > onsubmit > bind submit
});
</script>
单击按钮时,首先发生绑定到按钮的事件(“单击”事件),然后发生绑定到表单的事件(“提交”事件)。结果如下:
- 警报:点击
- 警报:绑定点击
- 警报:提交时
- 警报:绑定提交
- 表单提交
如果您在任何函数中包含任何重定向代码,重定向将被忽略并发生提交,我相信 javascript 会document.location.href
用表单发布过程覆盖,“表单提交”就像末尾的隐式/隐藏代码行脚本,如果您在某些时候不这样做,return false;
则会执行此隐式/隐藏行。
我不是专家,但这是我经过一些测试后理解的。如果我错了,请纠正我。
编辑:如果我们document.location.href
在每个函数中包含一个怎么办?像这样:
<form id="myform" method="post" onsubmit="document.location.href='http://www.onsumbit.com';">
<input id="mybtn" type="submit" value="submit" onclick="document.location.href='http://www.onclick.com';" />
</form>
<script>
$(document).ready(function() {
$('#mybtn').bind('click', function() {
document.location.href='http://www.bindclick.com';
return false;
});
$('#myform').bind('submit', function() {
document.location.href='http://www.bindsumbit.com';
});
});
</script>
“href”的字符串值的状态变化如下(但在脚本末尾执行重定向):
- document.location.href = ' http://www.onclick.com ';
- document.location.href = ' http://www.bindclick.com ';
- document.location.href = ' http://www.onsubmit.com ';
- document.location.href = ' http://www.bindsubmit.com ';
- document.location.href = '/'; // 表单提交
- javascript,根据“href”字符串值进行重定向
但我们return false;
在 #2 之后,这意味着将为“ http://www.bindclick.com ”做重定向