Javascript: 在函数中调用函数时,window.location.href不会重定向

3
当单击按钮时,window.location.href将浏览器重定向到stackoverflow.com,但在输入文本字段中按“Enter”键时不会重定向,尽管两个事件侦听器都使用相同的函数visitStack。
如果更改表单标记为div标记,则可以使其工作,但这当然不是语义化的。
将最后一行中的“keydown”更改为“click”,并立即将visitStack(e)移动到keyDownTextField(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
我总是只使用 "window.location = newURL;" 参见:https://developer.mozilla.org/En/DOM/Window.location - Laimoncijus
@artemb 在使用 Firebug 控制台测试时,两者在 Firefox 上都能工作。console.log(window.location === document.location); 输出 true - Amarghosh
2
当页面嵌入iframe中时,window.location和document.location会有所不同。 - varikin
2个回答

1
在HTML表单的文本输入字段中按下ENTER键在不同浏览器上产生了不同的效果
在您的情况下,我假设在按下ENTER时提交表单。由于您没有指定任何action,表单将被提交到相同的页面并重新加载。

那么这可能不是竞态条件了? - chimerical

0

你也可以尝试在 visitStack() 函数中添加 e.preventDefault()e.stopPropagation()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接