2017-07-29 80 views
0

我的单页应用程序中有几个表单。所有表单都使用相同的功能来提交数据。为了使用HTML5验证,我必须将输入类型从button更改为submit。现在,如果我点击Submit按钮,我可以看到验证消息,但我的表单仍然提交。我如何防止提交并保持我的验证?下面是我的例子形式:如何保持验证,但防止表单提交? JQuery

<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> 

这里是我的例子功能的提交按钮:

$('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); 
    }); 
}); 

所有形式对提交按钮相同的名称。我的JQuery选择器使用该名称来提交表单。如果有人知道我如何保持我已经拥有并阻止提交的相同逻辑/功能,请告诉我。

+0

改变输入类型,从提交到按钮或添加e.preventDefault(),以防止从表单提交 – guradio

+0

如果我改变输入类型按钮HTML5验证将不起作用... –

+0

使用或部分,然后阻止提交 – guradio

回答

0

您正在使用点击事件,这意味着您的功能将在每次点击中运行。请考虑使用submit事件。这应该阻止该函数在提交表单之前运行,如果存在HTML5验证错误,则不能执行此操作。
[编辑]而为了澄清,你也会改变你的事件监听器是看表单元素,而不是按钮。所以:

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

这种解决方案对我无效。我无法使用表单ID。我的应用中有多个表单,而且这个功能是动态的。我已经应用了一些依赖于这种基于输入名称的函数的逻辑。有没有其他方法可以解决这个问题? –

+0

您可以为每个按钮设置点击处理程序,以编程方式触发表单提交。您需要传递正在提交的表单元素,这意味着您可以将表单ID保留在每个按钮上的数据标记中。这就是我想尽我所能的。 – Chase

0

你可以使用表单标签的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>

0

你可以像这样

如果更改输入类型按钮时,它会更好因为你没有提交表单,所以你正在发送一个Ajax请求。

首先制作不同的js脚本进行验证,并在调用ajax之前放置条件。

如果(有效)调用ü已经 调用AJAX如果没有返回false

+0

@Frsay你能举例说明吗?过去我做过类似的事情,但我的验证是JavaScript。现在我正在尝试使用HTML5验证。提前致谢。 –

+0

第一变化乌尔输入类型按钮 <脚本类型= “文本/ JavaScript的”> $(文件)。就绪(函数(){ \t \t变种FNAME = $( '#frmst_lname')。VAL() ; \t \t var lname = $('#frmst_fname')。VAL(); var(dob)= $('#frmst_dob')。val(); \t \t如果(FNAME!= '' && lanme!= '' && DOB!= '') \t \t { \t \t \t $( '输入[名称= “frmSubmit”]')。在( '点击' ,函数(){ \t \t \t \t //调用你的Ajax \t \t \t}); \t \t} }); – Farsay

+0

我刚发现HTML5 Validation存在另一个问题。我可以在必填字段中输入空格,验证将评估为true。这会导致所有类型的问题。 –