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

表单提交后全局变量userInputHours更新值无法保留的问题

问题根源与解决方案

嘿,这问题我太熟了——表单提交的默认刷新行为在搞破坏!

你遇到的核心问题是:当点击表单里的submit-1按钮时,浏览器会触发表单的默认提交动作——也就是刷新整个页面。页面一刷新,所有全局变量都会被重新初始化,你刚赋值的userInputHours自然又变回初始值0了,这就是为什么info-box里的输入值只闪一下就消失,控制台直接打印userInputHours也还是0。

而场景2里的submit-2没问题,是因为它不在表单内部,点击它不会触发表单的默认提交,页面不会刷新,所以全局变量能保持修改后的值。

下面给你两种简单的解决方法,直接改现有代码就行:

方法1:阻止表单的默认提交行为

修改你的HTML和JavaScript,让表单验证通过后不刷新页面:

修改HTML的form标签

把onsubmit的调用改成传递事件对象:

<form onsubmit="return validation(event);">

修改JavaScript的validation函数

在验证通过时,用event.preventDefault()阻止页面刷新:

// Global variables.
var userInputHours = 0;

// Validation.
function validation(event) {
  userInputHours = document.getElementById("userInputHours").value;
  /* Validates blank fields */
  if (userInputHours == "") {
    console.log("A field is left blank");
    alert("Please fill in all fields!")
    return false;
  } else {
    console.log("You added: " + userInputHours);
    document.getElementById("info-box-text").innerHTML = userInputHours;
    // 阻止表单默认提交(关键!)
    event.preventDefault();
    return false; // 也可以直接return false,同样能阻止默认行为
  }
}

/* 其他函数保持不变 */
function outsideValidation() {
  userInputHours = 5;
  document.getElementById("info-box-text").innerHTML = userInputHours;
}

// 页面加载时初始化显示
document.getElementById("info-box-text").innerHTML = userInputHours;

方法2:把submit按钮改成普通按钮

如果不需要表单的提交功能(比如只是做前端验证和显示),可以直接把submit-1的类型改成button,这样点击它就不会触发表单提交:

修改HTML的submit-1按钮

<input id="submit-1" type="button" value="Submit-1 (inside form)" onclick="validation()">

调整JavaScript的validation函数

不需要再返回true/false,因为现在只是普通按钮的点击事件:

function validation() {
  userInputHours = document.getElementById("userInputHours").value;
  if (userInputHours == "") {
    console.log("A field is left blank");
    alert("Please fill in all fields!")
  } else {
    console.log("You added: " + userInputHours);
    document.getElementById("info-box-text").innerHTML = userInputHours;
  }
}

两种方法都能解决你的问题,选哪种看你后续是否需要表单的提交功能(比如给后端发数据)。如果之后要发数据,方法1更合适,阻止默认行为后还可以用AJAX异步提交;如果只是前端交互,方法2更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:48