Gen*_*ari 5 html javascript forms redirect submit
我在一个正在研究的网站上遇到了这个奇怪的代码,并且不明白我所看到的行为是如何或为何发生的.
<input type="submit" value="Save" onclick="document.location.href='http://www.google.com'" />
Run Code Online (Sandbox Code Playgroud)
(更改了href;它实际上指向了与表单操作相同的URL).
因为onclick事件在提交表单之前触发,我希望此代码将页面重定向到Google.com,从而停止执行页面并且永远不会提交表单.或者可能重定向到Google.com但仍然完成提交表单.
但是发生的事情似乎是重定向完全被忽略了,无论如何都要提交表单.为什么会这样?
我确认onclick事件发生得很好; 我将重定向移动到一个函数中并调用了函数onclick.在提交之前调用该函数就好了,但是重定向似乎被忽略了.
我刚刚在不同的浏览器中测试了这种行为,所有浏览器都给出了相同的结果,这是我的结论:
<!-- 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 -->
Run Code Online (Sandbox Code Playgroud)
如您所知,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>
Run Code Online (Sandbox Code Playgroud)
单击按钮时,绑定到按钮的事件首先发生(“单击”事件),然后绑定到表单的事件接下来发生(“提交”事件)。结果如下:
如果您在任何函数中包含任何重定向代码,重定向将被忽略并发生提交,我相信 javascript 会覆盖document.location.href表单发布过程,“表单提交”就像在末尾的隐式/隐藏代码行脚本,如果您return false;在某些时候不这样做,则会执行此隐式/隐藏行。
我不是专家,但这是我经过一些测试后的理解。如果我错了,请纠正我。
编辑:如果我们document.location.href在每个函数中都包含 a怎么办?像这样:
<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>
Run Code Online (Sandbox Code Playgroud)
"href" 的字符串值的状态变化如下(但在脚本末尾执行重定向):
但我们return false;在 #2 之后,这意味着将对“ http://www.bindclick.com ”进行重定向
| 归档时间: |
|
| 查看次数: |
3393 次 |
| 最近记录: |