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

JS登录函数执行后动态创建的欢迎标题元素消失问题

问题原因

表单内的<button>标签默认type属性值为submit,点击登录按钮时,除了触发绑定的logIn()函数,还会触发表单默认的提交跳转、页面刷新行为。通过JS动态插入的欢迎标题存储在当前页面运行内存中,页面刷新后所有动态生成的DOM内容都会被重置清空,最终出现欢迎标题闪现后直接消失的现象。

修复方案
  • 核心修复:解决表单默认提交导致页面刷新的问题,两种实现方式选其一即可
    • 简便实现:给登录按钮显式添加type="button"属性。按钮位于表单内时默认type为submit,显式设置为button后就不会触发表单提交刷新逻辑
    • 逻辑实现:给logIn函数传入事件对象,调用方法阻止默认提交行为
  • 可选优化:插入欢迎标题前先清空#Welcome容器的原有内容,避免用户多次点击登录时重复追加多个欢迎标题。
参考修正代码

方案1:修改按钮type(无需调整JS传参)

只需要修改HTML中的登录按钮标签:

<button type="button" onclick="logIn();"><h2>Log in</h2></button>

对应优化后的JS代码:

function logIn() {
        var email = document.getElementById("email").value;
        var password = document.getElementById("password").value;
        var welcomeVar = document.createElement("h1");
        welcomeVar.innerHTML = "Welcome, " + email;
        const welcomeContainer = document.getElementById("Welcome");
        // 插入前清空容器,避免重复生成标题
        welcomeContainer.innerHTML = '';
        welcomeContainer.appendChild(welcomeVar);
}

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

修改HTML中按钮的事件绑定,传入事件对象:

<button onclick="logIn(event);"><h2>Log in</h2></button>

对应JS代码:

function logIn(e) {
        // 阻止表单默认提交刷新
        e.preventDefault();
        var email = document.getElementById("email").value;
        var password = document.getElementById("password").value;
        var welcomeVar = document.createElement("h1");
        welcomeVar.innerHTML = "Welcome, " + email;
        const welcomeContainer = document.getElementById("Welcome");
        welcomeContainer.innerHTML = '';
        welcomeContainer.appendChild(welcomeVar);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:24:20