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

JS中如何在函数内更新全局对象并在另一函数中访问其值?

问题分析与解决方案

嘿,你遇到的其实是个很容易忽略的小坑——你的按钮是type="submit",点击它会触发浏览器的默认表单提交行为,导致页面刷新!

为什么全局对象的修改没生效?

虽然doguinho确实是全局上下文声明的对象,你在btn-enviar的点击事件里也正确修改了它的属性值,但页面刷新后,整个JavaScript执行环境会重新初始化,doguinho又会被重置为初始的空属性状态,所以你点击btn-mostrar时看到的还是空字符串。

两种修复方案

方案1:修改按钮类型为button

把两个按钮的type="submit"改成type="button",这样就不会触发默认的表单提交刷新行为了:

<!DOCTYPE html>
<html>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<input type="text" id="input-nome">
<br/>
<input type="text" id="input-idade">
<br/>
<input type="text" id="input-raca">
<br/>
<input type="text" id="input-coloracao">
<br/>
<button type="button" name="btn-enviar">save</button>
<button type="button" name="btn-mostrar">alert</button>
<script>
var doguinho = { nome : "", idade : "", raca : "", coloracao : "" };
$(document).ready(() => {
  $('button[name="btn-enviar"]').click(() => {
    doguinho.nome = $('input[id="input-nome"]').val();
    doguinho.idade = $('input[id="input-idade"]').val();
    doguinho.raca = $('input[id="input-raca"]').val();
    doguinho.coloracao = $('input[id="input-coloracao"]').val();
  })
  $('button[name="btn-mostrar"]').click(() => {
    alert(doguinho.nome);
  })
} );
</script>
</body>
</html>

方案2:阻止按钮的默认提交行为

如果你需要保留submit类型(比如页面真的有表单需要提交逻辑),可以在点击事件里调用event.preventDefault()来阻止页面刷新:

$(document).ready(() => {
  $('button[name="btn-enviar"]').click((event) => {
    // 阻止默认提交行为
    event.preventDefault();
    doguinho.nome = $('input[id="input-nome"]').val();
    doguinho.idade = $('input[id="input-idade"]').val();
    doguinho.raca = $('input[id="input-raca"]').val();
    doguinho.coloracao = $('input[id="input-coloracao"]').val();
  })
  $('button[name="btn-mostrar"]').click(() => {
    alert(doguinho.nome);
  })
} );

补充说明

全局对象确实可以在任意函数中访问和修改,你的代码逻辑本身是对的,只是被浏览器的默认表单提交行为打断了。只要阻止了页面刷新,你修改的全局对象值就会被保留,点击btn-mostrar就能看到正确的内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:53:20