You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

window.open('url', '_self')失效:替换当前页面打开新页面失败

问题分析与解决方案

你的问题核心在于submit类型按钮的默认表单提交行为干扰了页面跳转操作,让我们一步步拆解:

为什么window.open('url', '_self')没效果?

你用的按钮是type="submit",点击后浏览器会自动触发表单的默认提交流程——页面会刷新(如果没有阻止的话)。这时候window.open('_self')的跳转请求还没来得及执行,就被页面刷新给覆盖了;而_blank是打开新窗口,不受当前页面刷新的影响,所以能正常工作。

另外,其实替换当前页面根本不需要用window.open,window.location.href才是标准、可靠的方式,专门用来在当前页面跳转目标URL。

几种可行的修复方案

方案1:把按钮类型改成button(最简单)

直接避免触发表单提交行为:

<button id="rgstr_btn" type="button" class="btn btn-info" onClick="store()">Register</button>
<script>
function store() {
  localStorage.setItem('nome', nome.value);
  localStorage.setItem('pw', pw.value);
  // 用标准的页面跳转替代window.open
  window.location.href = 'url';
}
</script>

方案2:阻止表单的默认提交行为

如果必须保留type="submit"(比如需要利用表单的其他特性),可以在函数里阻止默认行为:

<button id="rgstr_btn" type="submit" class="btn btn-info" onClick="store(event)">Register</button>
<script>
function store(event) {
  // 阻止表单默认提交
  event.preventDefault();
  
  localStorage.setItem('nome', nome.value);
  localStorage.setItem('pw', pw.value);
  window.location.href = 'url';
}
</script>

或者通过返回false来阻止:

<button id="rgstr_btn" type="submit" class="btn btn-info" onClick="return store()">Register</button>
<script>
function store() {
  localStorage.setItem('nome', nome.value);
  localStorage.setItem('pw', pw.value);
  window.location.href = 'url';
  
  // 返回false阻止默认提交
  return false;
}
</script>

方案3:直接修改表单的提交事件(更规范)

如果你的按钮在<form>标签里,也可以直接给表单绑定onsubmit事件,阻止默认提交并执行逻辑:

<form onsubmit="return store()">
  <!-- 你的表单输入框 -->
  <input type="text" id="nome">
  <input type="password" id="pw">
  <button id="rgstr_btn" type="submit" class="btn btn-info">Register</button>
</form>
<script>
function store() {
  localStorage.setItem('nome', document.getElementById('nome').value);
  localStorage.setItem('pw', document.getElementById('pw').value);
  window.location.href = 'url';
  
  return false;
}
</script>

额外提示

  • 尽量避免直接用nome.value这种方式获取输入值,最好通过document.getElementById('nome').value来获取,避免变量作用域问题。
  • 存储密码到localStorage是非常不安全的行为,建议不要在实际项目中这么做,敏感数据应该通过安全的后端接口处理。

内容的提问来源于stack exchange,提问作者Poli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:38:40