You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

表单按钮带ID时required失效,无法阻止空字段提交的问题

解决表单required验证与AJAX提交共存的问题

这个问题我之前也碰到过,核心原因是你直接绑定按钮的click事件时,会绕过浏览器的原生表单验证流程。当你移除按钮ID后,按钮默认属于submit类型(在表单内未指定type时的默认值),所以浏览器会自动触发required验证;但加了ID绑定click事件后,代码直接执行AJAX,跳过了验证步骤。

下面给你两种可行的解决方案:

方案一:监听表单submit事件(推荐)

这种方式会让浏览器先完成原生验证,验证通过后再执行AJAX提交,是最符合规范的做法。

修改按钮代码

给按钮加上type="submit"属性:

<div class="modal-footer"> 
  <button type="submit" class="btn btn-primary py-1" style="font-size: 14px" id="btnguardar">Guardar datos</button> 
  <button type="button" class="btn btn-secondary py-1" style="font-size: 14px" data-dismiss="modal">Cancelar</button> 
</div>

修改AJAX代码

监听表单的submit事件,同时阻止默认的表单提交行为:

$(document).ready(function(){
  $('#frmpsb').submit(function(e){
    // 阻止浏览器默认的表单提交
    e.preventDefault();
    
    // 此时浏览器已经完成了required验证,只有验证通过才会走到这里
    var datos = $(this).serialize();
    $.ajax({
      type:"POST",
      url:"insertar.php",
      data:datos,
      success:function(r){
        if(r==1){
          // 这里可以添加提交成功后的逻辑,比如关闭模态框、提示成功等
        }else{
          alert('Fallo al enviar la peticion.');
        }
      }
    });
  });
});

方案二:手动触发表单验证(如果坚持用click事件)

如果不想改表单的submit监听,也可以在按钮的click事件里手动触发验证:

$(document).ready(function(){
  $('#btnguardar').click(function(){
    var form = $('#frmpsb')[0];
    // 手动检查表单是否符合验证规则
    if(form.checkValidity()){
      var datos = $('#frmpsb').serialize();
      $.ajax({
        type:"POST",
        url:"insertar.php",
        data:datos,
        success:function(r){
          if(r==1){
            // 成功逻辑
          }else{
            alert('Fallo al enviar la peticion.');
          }
        }
      });
    } else {
      // 触发浏览器的原生错误提示
      form.reportValidity();
    }
  });
});

这样两种方式都能同时保留按钮ID用于AJAX绑定,又让required属性的原生验证生效。

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

火山引擎 最新活动