這個問題的靈感來自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