这个问题的灵感来自this post。为什么提交表单覆盖提交按钮点击处理程序中的设置location.href?
总而言之:为什么window.location.href
在执行下面的代码时没有重定向到新页面(example.com)?
<form>
<input type="submit" id="submit" value="Submit">
</form>
<script>
document.getElementById('submit').addEventListener('click', function (e) {
window.location.href = "http://www.example.com";
});
</script>
我一直相信,该设置window.location.href
立即加载一个新的页面,但在这种情况下,它没有。提交表单只是重新加载页面,而设置新的位置似乎完全被忽略。为什么?怎么样?我在这里错过了什么?
请注意,我知道如何防止表单在这种情况下提交的几种方法,而我想知道,为什么设置location.href
被忽略。
信息
这似乎在所有主要浏览器(Chrome,FF,IE11)的情况发生,而不是在代码的堆栈段运行。放入函数alert/console.log
显示,点击处理程序在submit
之前执行。
A jsFiddle reproducing该问题。
哈哈......好问题。 – brso05 2014-10-17 20:48:00
这是一个棘手的问题!最后,我认为它与通过返回false来阻止表单的传播有关。你的代码甚至可能被重构来做到这一点,与我在下面提供的答案混合在一起。 – trnelson 2014-10-20 14:48:11
我不认为他在问如何解决这个问题......他想知道为什么会发生这种情况。简单地说,当表单提交时,取消了location.href更改,而是提交表单? – 2014-10-20 14:50:40