简体   繁体   English

如何保持验证但阻止表单提交? JQuery的

[英]How to keep validation but prevent form submit? JQuery

I have few forms on my single page app. 我的单页应用程序上的表格很少。 All forms use the same function for submitting data. 所有表格使用相同的功能提交数据。 In order to use HTML5 validation I had to change input type from button to submit . 为了使用HTML5验证,我不得不将输入类型从button更改为submit Now if I click on the Submit button I can see validation message but my form is still submitted. 现在,如果我单击“ Submit按钮,我可以看到验证消息,但我的表单仍在提交。 How I can prevent from submit and keep my validation? 如何防止提交并保留我的验证? Here is example of my form: 这是我的表格示例:

<form name="myForm" id="myForm" method="POST" action="#">
    <fieldset>
        <legend>User Info</legend>
        <div class="formItem">
            <label for="last_name">Last Name:</label>
            <input type="text" name="frmst_lname" id="frmst_lname" value="" size="20" maxlength="30" title="Maximum length 30 characters." required/>
        </div>
        <div class="formItem">
            <label for="first_name">First Name:</label>
            <input type="text" name="frmst_fname" id="frmst_fname" value="" size="20" maxlength="30" title="Maximum length 30 characters." required/>
        </div>
        <div class="formItem">
            <label for="dob">DOB:</label>
            <input type="text" name="frmst_dob" id="frmst_dob" value="" size="10" maxlength="10" placeholder="MM/DD/YYYY" class="datepick" required/>
        </div>
        <div class="formItem">
            <p align="center"><input type="submit" name="frmSubmit" id="frmstSubmit" value="Submit"></p>
        </div>
    </fieldset>
</form>

And here is example of my function for Submit button: 这是我的“提交”按钮功能的示例:

$('input[name="frmSubmit"]').on('click', function(){
   var formData = $('#'+frmID).serialize(); 
   $.ajax({
        type: 'POST',
        url: 'App.cfc?method=updateRecord',
        data: formData,
        dataType: 'json'
    }).done(function(obj){
        //handle call back  
    }).fail(function(jqXHR, textStatus, errorThrown){
        alert(errorThrown);
    });
});

All form have same name for submit button. 所有表单的提交按钮名称相同。 My JQuery selector use that name to submit the form. 我的JQuery选择器使用该名称提交表单。 If anyone knows how I can keep the same logic/function that I already have and prevent from submit please let me know. 如果有人知道我如何保持已经拥有的相同逻辑/功能并阻止提交,请告诉我。

You're using click for your event, which means your function will run on each click. 您将click用于事件,这意味着您的功能将在每次点击时运行。 Look into using the submit event instead. 考虑改为使用Submit事件。 This should prevent the function from running until the form is submitted, which it can't do if there are HTML5 validation errors. 这样可以防止该功能在提交表单之前运行,如果存在HTML5验证错误,则该功能无法执行。
[EDIT] And for clarification, you would also change your event listener to be watching the form element, not the button. [编辑]为了澄清起见,您还可以将事件侦听器更改为监视表单元素,而不是按钮。 So: 所以:

$('#myForm').on('submit', function... etc. 

you can use onSubmit property of form tag 您可以使用表单标签的onSubmit属性

 function submitForm() { var formData = $('#'+frmID).serialize(); $.ajax({ type: 'POST', url: 'App.cfc?method=updateRecord', data: formData, dataType: 'json' }).done(function(obj){ //handle call back }).fail(function(jqXHR, textStatus, errorThrown){ alert(errorThrown); }); } 
 <form name="myForm" id="myForm" onSubmit="submitForm();" method="POST" action="#"> <fieldset> <legend>User Info</legend> <div class="formItem"> <label for="last_name">Last Name:</label> <input type="text" name="frmst_lname" id="frmst_lname" value="" size="20" maxlength="30" title="Maximum length 30 characters." required/> </div> <div class="formItem"> <label for="first_name">First Name:</label> <input type="text" name="frmst_fname" id="frmst_fname" value="" size="20" maxlength="30" title="Maximum length 30 characters." required/> </div> <div class="formItem"> <label for="dob">DOB:</label> <input type="text" name="frmst_dob" id="frmst_dob" value="" size="10" maxlength="10" placeholder="MM/DD/YYYY" class="datepick" required/> </div> <div class="formItem"> <p align="center"><input type="submit" name="frmSubmit" id="frmstSubmit" value="Submit"></p> </div> </fieldset> </form> 

Can you do like this 你能这样吗

It would be better if you change input type to button because you are not submitting form you are sending ajax request. 如果将输入类型更改为button会更好,因为您没有提交表单,而是要发送ajax请求。

First make different js script for validation and put the condition before calling ajax. 首先创建不同的js脚本进行验证,然后在调用ajax之前放入条件。

if(valid) call the ajax u calling already if not return false if(valid)调用ajax u已调用,如果没有返回false

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM