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

JQuery弹窗点击取消按钮时避免提交底层表单的问题排查

解决模态弹窗Cancel按钮提交表单的问题

我一眼就看出问题所在了——你的Cancel按钮用了<input type="image">,这个类型的控件本质上是表单提交按钮,哪怕你绑定了关闭弹窗的逻辑,它还是会触发表单的默认submit事件,这就是为什么点击取消会提交表单的原因。另外你写的myfunction函数也有问题:你试图给按钮调用dialog("close"),但按钮本身不是dialog的容器,这个调用根本不会生效。

下面给你几个可行的解决方案,按推荐程度排序:

方案1:用jQuery UI Dialog自带的按钮配置(最规范)

jQuery UI Dialog本身支持内置按钮配置,完全不需要自己在HTML里写Cancel和Login按钮,这样能彻底避免表单误提交的问题,代码也更整洁:

修改后的JavaScript代码

$(function() {
  // 初始化Dialog,直接配置按钮
  $("#LoginForm").attr('title', 'Login').dialog({
    autoOpen: false,
    closeOnEscape: true,
    modal: true,
    position: 'center',
    width: 350,
    height: 300,
    buttons: {
      // Cancel按钮逻辑:只关闭弹窗
      "Cancel": function() {
        $(this).dialog("close");
      },
      // Login按钮逻辑:提交表单
      "Login": function() {
        $("#LoginForm").submit();
        $("#dologin").css("border","1px solid black");
      }
    }
  });

  $(".opener").click(function() {
    $("#LoginForm").dialog("open");
    return false;
  });

  // 弹窗打开时自动聚焦密码框(注意事件名是dialogopen,不是shown.modal)
  $('#LoginForm').on('dialogopen', function () {
    $("#password").focus();
  });
});

修改后的HTML代码

直接移除原来的Cancel和Login按钮,因为Dialog会自动生成:

<div id="LoginBox" title="Login">
  <form method="post" action="clear_faults_submit.php" target="_self" id="LoginForm" name="form1">
    <div id="LoginAdminPINDiv">
      <div class="PINFormSubHeaderBold">Enter Admin PIN:</div>
      <div class="PINFormSubHeaderPass">
        <input type="password" id="password" name="password" placeholder="***" class="LoginInputBox" maxlength="4">
      </div>
    </div>
    <div class="feedback" id="feedback"></div>
    <div class="Clear">
      <div id="divider"></div>
    </div>
    <!-- 移除原来的按钮区域 -->
  </form>
</div>

方案2:修改Cancel按钮类型,阻止默认提交行为

如果你想保留自己的图片按钮,那需要把Cancel按钮改成type="button"(不会触发表单提交),或者给它绑定点击事件时阻止默认行为:

方法A:修改按钮类型

修改HTML里的Cancel按钮:

<input type="button" id="close_login" src="images/cancel.png" style="border: none; background: transparent; cursor: pointer;">

(加style是为了去掉默认按钮样式,让它看起来还是图片的样子)

然后在JavaScript里绑定关闭事件:

$("#close_login").click(function() {
  $("#LoginForm").dialog("close");
});

方法B:阻止默认行为(不修改按钮类型)

如果不想改按钮类型,就在点击事件里阻止表单提交的默认行为:

$("#close_login").click(function(e) {
  // 阻止表单提交的默认行为
  e.preventDefault();
  // 关闭弹窗
  $("#LoginForm").dialog("close");
});

另外,你的Login按钮也建议加上e.preventDefault(),避免重复提交:

$("#dologin").click(function(e) {
  e.preventDefault();
  $("#LoginForm").submit();
  $("#dologin").css("border","1px solid black");
});

关键知识点回顾

  • <input type="image"> 是表单提交控件,点击会触发所在表单的submit事件,这是HTML的默认行为
  • jQuery UI Dialog的dialog("close")方法需要调用在初始化Dialog的元素上(也就是你的#LoginForm),而不是按钮元素
  • 用Dialog内置按钮是最省心的方式,因为它的按钮不会触发表单默认提交

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:04:25