2010-03-03 76 views
2

window.location.href當點擊按鈕時將瀏覽器重定向到stackoverflow.com,但在輸入文本框中按下「Enter」時不會重定向儘管兩個事件監聽器使用相同的函數visitStack。Javascript:window.location.href在函數內調用函數時不重定向

如果有幫助,將表單標籤更改爲div標籤可以使其工作,但它不是語義的,當然。

將最後一行中的「keydown」改爲「click」,並在keyDownTextField(e)中立即移動visitStack(e),使其工作。

因此keydown和/或表單標籤似乎是這裏的罪魁禍首,但我不確定。

<form> 
<input id="iamtext" type="text" /> 
<input id="gobutton" type="button" value="Overflow" />    
</form> 


<script type="text/javascript"> 
    document.getElementById("gobutton").addEventListener("click", visitStack, false); 

    function visitStack(e) { 
     e.stopPropagation();     
     window.location.href = "http://www.stackoverflow.com"; 
    } 

    function keyDownTextField(e) { 
     var keyCode = e.keyCode; 
     if(keyCode==13) { 
      alert("Entered!"); 
      visitStack(e); 
     } 
    } 

    document.getElementById("iamtext").addEventListener("keydown", keyDownTextField, false); 
</script> 
+1

不應該是document.location.href? – artemb 2010-03-03 08:20:47

+0

我總是隻使用「window.location = newURL;」 請參閱:https://developer.mozilla.org/En/DOM/Window.location – Laimoncijus 2010-03-03 08:30:22

+0

@artemb兩者都可以在Firefox中使用Firebug控制檯進行測試。 'console.log(window.location === document.location);'打印'true' – Amarghosh 2010-03-03 08:31:20

回答

1

在HTML表單擊中在文本輸入字段ENTER對不同的瀏覽器,而different effects

在你的情況下,我認爲表單是按ENTER鍵提交的。由於您沒有指定任何action,因此表單被提交到同一頁面導致重新加載。

+0

那麼它可能不是一個競賽條件呢? – chimerical 2010-03-03 08:40:16

0

您還可以嘗試將e.preventDefault()以及e.stopPropagation()添加到visitStack()。