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

Javascript:window.location.href不';在函数中调用函数时不重定向,javascript,Javascript,window.location.href在单击按钮时将浏览器重定向到stackoverflow.com,但在输入文本字段中单击“Enter”时不会重定向,尽管两个事件侦听器使用相同的函数visitStack 如果这有帮助的话,将表单标记更改为div标记会使其工作起来,但这当然不是语义上的 将最后一行中的“keydown”更改为“click”,并将visitStack(e)立即移动到keyDownTextField(e)中,使其也能工作 所以keydown和/或表单标签似乎是罪魁祸首,但我不确定

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>

document.getElementById(“gobutton”).addEventListener(“单击”,visitStack,false);
功能访问策略(e){
e、 停止传播();
window.location.href=”http://www.stackoverflow.com";
}
功能键向下文本字段(e){
var-keyCode=e.keyCode;
如果(键代码==13){
警报(“已输入!”);
visitStack(e);
}
}
document.getElementById(“iamtext”).addEventListener(“keydown”,keyDownTextField,false);

在HTML表单中的文本输入字段中点击
输入
,在不同的浏览器上会有不同的效果


在您的情况下,我假设表单是在按ENTER键时提交的。由于您没有指定任何
操作
,表单将提交到同一页面,导致重新加载。

您也可以尝试将
e.preventDefault()
以及
e.stopPropagation()
添加到visitStack()。

它不应该是document.location.href吗?我总是只使用“window.location=newURL;”请参阅:@artemb在Firefox中使用Firebug控制台进行测试时都可以工作<代码>控制台.log(window.location==文档.location)打印
true
window.location和document.location在页面位于iframe中时会有所不同。所以这可能不是竞争条件?