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

jQuery点击忘记密码按钮添加弹窗后立即消失问题求助

问题解决:点击按钮弹窗后立即消失的原因及修复方案

嘿,这个问题我太熟了!你的弹窗之所以刚显示就消失,核心原因是按钮触发了表单的默认提交行为——因为你的“Forgot password?”按钮是放在<form>标签内部的,而HTML里按钮默认的type属性是submit,点击它会自动提交表单,导致页面刷新,刚创建的弹窗自然就跟着没了。

下面给你两种简单的修复方案,任选其一就行:

方案一:给按钮指定type="button"

直接在创建按钮的时候设置type属性为button,这样它就不会触发表单提交了:

let passwordRequest = $('<button>');
passwordRequest.text('Forgot password?');
passwordRequest.attr('id', 'passwordRequest');
// 新增这一行,指定按钮类型为普通按钮
passwordRequest.attr('type', 'button');
passwordRequest.appendTo(form);

方案二:在点击事件中阻止默认行为

如果不想改按钮类型,也可以在点击事件处理函数里阻止浏览器的默认行为:

$(passwordRequest).on('click', function(event) {
  // 阻止表单提交的默认行为
  event.preventDefault();
  requestForgottenPassword();
});

完整修正后的代码示例

这里把所有代码整合好,你可以直接用:

HTML

<div id="logIn">
  <h1>Login</h1>
  <form>
    <h2>Username</h2>
    <input id="username" type="text">
    <h2>Password</h2>
    <input id="userPassword" type="password">
    <input id="submitButton" type="submit" value="Login">
  </form>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

CSS

#logIn {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 50px;
  background-color: #fff;
  border-radius: 20px;
  box-shadow: 2px 5px 40px rgb(201, 201, 201);
}
form {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 10px;
}
h2 {
  font-size: 20px;
  font-weight: 300;
  margin-top: 10px;
}
input[type=text], input[type=password] {
  padding: 10px;
  width: 300px;
  margin: 10px;
  border-radius: 3px;
  border: 1px solid rgb(221, 221, 221);
  font-size: 14px;
  transition: 200ms;
}
input[type=submit] {
  padding: 5px 15px;
  margin-top: 30px;
  font-size: 16px;
  font-weight: 600;
  outline: none;
  cursor: pointer;
  border-radius: 3px;
  border: 1px solid rgb(114, 114, 114);
  transition: 100ms;
}
#passwordRequest {
  font-size: 14px;
  text-decoration: none;
  color: rgb(62, 184, 255);
  margin-top: 20px;
  border: none;
  outline: none;
  cursor: pointer;
  background-color: transparent;
  transition: 100ms;
  padding: 5px;
}
#passwordPopup {
  width: 200px;
  height: 200px;
  position: absolute;
  background-color: aqua;
}

JavaScript

let form = $('form');
let passwordRequest = $('<button>');
passwordRequest.text('Forgot password?');
passwordRequest.attr('id', 'passwordRequest');
passwordRequest.attr('type', 'button'); // 方案一的修改
passwordRequest.appendTo(form);

function requestForgottenPassword() {
  let popup = $('<div />').appendTo(form);
  popup.attr('id', 'passwordPopup');
};

// 如果用方案二,就把下面的代码改成带event.preventDefault()的版本
$(passwordRequest).on('click', function() {
  requestForgottenPassword();
});

这样修改后,点击“Forgot password?”按钮就只会创建弹窗,不会触发表单提交,弹窗也就不会消失啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:57:55