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

点击元素ID后jQuery无法提交表单问题求助

问题描述

我有如下表单代码(MyForm.html):

<form id="MyForm" ENCTYPE="application/x-www-form-urlencoded" class="form form-horizontal" autocomplete="off">
  <fieldset>

    <!-- .control-group -->

    <div class="control-group">
      <div class="control-label align-right">
        <label for="frm-shareDeliveryPopupForm-shareDeliveryForm-senderEmail">Your e-mail</label>
      </div>
      <!-- .control-label -->
      <div class="control-field">
        <input type="email" name="Email" id="senderEmail" required class="input">
      </div>
      <!-- .control-field -->
    </div>
    <!-- .control-group -->
    <div class="control-group" id="PasswordID">
      <div class="control-label align-right">
        <label for="senderPassword">Your password</label>
      </div>
      <!-- .control-label -->
      <div class="control-field">
        <input type="Password" name="Pass" id="Password" class="input" pattern=".4," title="6 characters minimum" required>
      </div>
      <!-- .control-field -->
    </div>
    <!-- .control-group -->


    <!-- .control-group -->



    <div id="SendDiv" class="control-group">

      <div class="control-label"></div>
      <!-- .control-label -->
      <div class="Centered" id="sendButton">
        <a href="#" data-name="download-button" class="btn btn-primary btn-large uppercase">
          <span>Download</span>
          <span class="spinner"></span>
        </a>
      </div>
      <!-- .control-field -->
    </div>
    <!-- .control-group -->

  </fieldset>

</form>

配套的表单处理JS代码如下:

/******************** START Submit Form by the click of an element ID *****************************************/
 $(document).ready(function(){
   $("#SendDiv").click(function(){
     $("#MyForm").submit();
   });
})
/******************** END Submit Form by the click of an element ID *****************************************/

/************** FORM PROCESSOR *******************************/


// process the form
    $("#MyForm").submit(function(event) {
        event.preventDefault();
        // get the form data
        // there are many ways to get this data using jQuery (you can use the class or id also)
        var formData = {
            'Email'                 : $('input[name=Email]').val(),
            'Password'              : $('input[name=Pass]').val()
        };

        // process the form
        $.ajax({
            type        : 'POST', // define the type of HTTP verb we want to use (POST for our form)
            url         : './process.php', // the url where we want to POST
            data        : formData, // our data object
            dataType    : 'json', // what type of data do we expect back from the server
            beforeSend: function()
            {
                
                $("#error").fadeOut();
            },
            encode      : true
        })
            // using the done promise callback
            .done(function(data) {

                // log data to the console so we can see
                console.log(data); 

                // here we will handle errors and validation messages
                if (!data.success) {
                    
    // handle errors  ---------------
    if (data.errors.Error) {
        window.location.href= "./error.php";
    }
    
    } else { 

                // ALL GOOD! just show the success message!
                    
                    window.location.href= "./success.php";
                }
            })

            // using the fail promise callback
            .fail(function(data) {

                // show any errors
                // best to remove for production
                console.log(data);
            });

        
    });

尝试点击ID为SendDiv的DIV提交表单,但多次尝试均未生效。试过通过元素ID或类提交表单也没用,不想使用常规提交按钮,避免表单处理时刷新页面,求解决方法。


解决方法

1. 修复事件绑定顺序

你的表单提交处理代码没有包裹在$(document).ready()中,DOM还未完全加载时就绑定事件会导致绑定失效。把所有事件逻辑都放进document.ready里:

$(document).ready(function(){
  // 点击SendDiv提交表单
  $("#SendDiv").click(function(){
    $("#MyForm").submit();
  });

  // 表单提交处理
  $("#MyForm").submit(function(event) {
    event.preventDefault();
    var formData = {
        'Email' : $('input[name=Email]').val(),
        'Password' : $('input[name=Pass]').val()
    };

    $.ajax({
        type : 'POST',
        url : './process.php',
        data : formData,
        dataType : 'json',
        beforeSend: function() {
            $("#error").fadeOut();
        },
        encode : true
    })
    .done(function(data) {
        console.log(data); 
        if (!data.success) {
            if (data.errors.Error) {
                window.location.href= "./error.php";
            }
        } else { 
            window.location.href= "./success.php";
        }
    })
    .fail(function(data) {
        console.log(data);
    });
  });
});

2. 处理原生表单验证

表单中的输入框带有required属性,点击非提交按钮触发表单提交时,浏览器原生验证会生效但可能没有明显提示,导致表单未真正提交。可以手动触发验证并显示提示:

修改SendDiv的点击事件:

$("#SendDiv").click(function(){
  const form = $("#MyForm")[0];
  // 检查表单是否通过验证
  if (form.checkValidity()) {
    form.submit();
  } else {
    // 显示原生验证提示
    form.reportValidity();
  }
});

3. 阻止a标签的默认行为

SendDiv内的<a>标签带有href="#",点击时会触发默认跳转行为,干扰表单提交。可以阻止其默认行为:

$("#sendButton a").click(function(e){
  e.preventDefault();
});

或者更推荐的方式:把<a>标签改成<button>元素,语义化更好且无默认跳转问题:

<div class="Centered" id="sendButton">
  <button data-name="download-button" class="btn btn-primary btn-large uppercase">
    <span>Download</span>
    <span class="spinner"></span>
  </button>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:24:52