2017-07-28 79 views
-1

我試圖爲每個字段創建動態表單驗證。表單上的每個元素都在單獨的div中進行了扭曲。表單上的任何必填字段都在標籤元素上設置了「必需」類。這裏是例如我的形式:循環顯示錶單元素並驗證每個字段的JQuery/Javascript?

$('.datepick').each(function(){ 
 
\t  $(this).attr('readonly', true).css("background-color", "#DCDCDC").datepicker({ 
 
\t  \t format: "mm/dd/yyyy", 
 
\t  \t changeMonth: true, 
 
      changeYear: true, 
 
      showOn: 'focus', 
 
      showButtonPanel: true, 
 
      closeText: 'Clear', 
 
      onClose: function(){ 
 
       var event = arguments.callee.caller.caller.arguments[0]; 
 
       
 
       \t if ($(event.delegateTarget).hasClass('ui-datepicker-close')) { 
 
        $(this).val(''); 
 
       } 
 
      } 
 
\t  }); 
 
\t });
.required:before { 
 
    content: '*'; 
 
    color: red; 
 
    margin-right: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="myForm" id="myForm" method="POST" action="#"> 
 
    \t <fieldset> 
 
    \t \t <legend>Info</legend> 
 
    \t \t \t <div class="formItem"> 
 
    \t \t \t \t <label for="last_name" class="required">Last Name:</label> 
 
    \t \t \t \t <input type="text" name="frmst_lname" id="frmst_lname" value="" size="20" maxlength="30" title="Maximum length 30 characters." /> 
 
    \t \t \t </div> 
 
    \t \t \t <div class="formItem"> 
 
    \t \t \t \t <label for="first_name" class="required">First Name:</label> 
 
    \t \t \t \t <input type="text" name="frmst_fname" id="frmst_fname" value="" size="20" maxlength="30" title="Maximum length 30 characters." /> 
 
    \t \t \t </div> 
 
    \t \t \t <div class="formItem"> 
 
    \t \t \t \t <label for="dob" class="required">DOB:</label> 
 
    \t \t \t \t <input type="text" name="frmst_dob" id="frmst_dob" value="" size="10" maxlength="10" placeholder="MM/DD/YYYY" class="datepick" /> 
 
    \t \t \t </div> 
 
       <div class="formItem"> 
 
    \t \t \t \t <label for="sport" class="required">Sport:</label> 
 
    \t \t \t \t <select name="frmst_sport" id="frmst_sport"> 
 
    \t \t \t \t \t <option value="">--Choose Sport--</option> 
 
    \t \t \t \t \t <cfoutput query="getSports"> 
 
    \t \t \t \t \t \t <option value="#d_dist#">#d_sname#</option> 
 
    \t \t \t \t \t </cfoutput> 
 
    \t \t \t \t </select> 
 
    \t   </div> 
 
       <div class="formItem"> 
 
    \t \t \t  <p align="center"><input type="button" name="frmSubmit" id="frmstSubmit" value="Submit"></p> 
 
    \t \t  </div> 
 
    \t </fieldset> 
 
    </form>

這是我試過到目前爲止:

function frmValidation(frmID){ 
    $('#'+frmID+' label').each(function(){ 
     if($(this).hasClass('required') && $(this).next('input').val() == ''){ 
      console.log($(this).attr('for')); 
     } 
    }); 
} 

我是測試如果循環會趕上帶班「必要」的所有元素以及輸入字段對於所需元素爲空。我想知道這是否是循環元素的最佳選擇?另外,我想在每個字段的下一個或下一個字段中設置消息。如果用戶嘗試提交表單,但必填字段爲空,則應在屏幕上顯示如下內容:'此字段是必需的'。如果有人有任何建議或例子,請讓我知道。謝謝。

+1

爲什麼不只是'required'屬性添加到所需的表單元素,然後你沒有寫任何代碼?或者,只需編寫'document.querySelectorAll(「。required」)'獲得使用'required'類的所有元素,而不是循環遍歷所有內容並測試該類?大多數(如果不是全部的話)這些代碼是不必要的。 –

+0

「你不必編寫任何代碼」是什麼意思? –

+0

如果將'required'屬性添加到表單元素,瀏覽器將自動對該元素進行驗證。 –

回答

0

您不需要任何JavaScript來驗證必填字段。只需將required屬性添加到所需的表單元素即可。

您還必須將您的「提交」按鈕更改爲實際的type="submit"按鈕,以便它將觸發驗證。你目前的「按鈕」就是這樣,一個常規的按鈕,點擊時沒有特別的事情。

另外,請記住,任何類型的客戶端驗證都很容易繞過想要繞過它的人,因此,您應該在表單提交後始終在服務器上重新驗證。

$('.datepick').each(function(){ 
 
    $(this).attr('readonly', true).css("background-color", "#DCDCDC").datepicker({ 
 
    format: "mm/dd/yyyy", 
 
    changeMonth: true, 
 
    changeYear: true, 
 
    showOn: 'focus', 
 
    showButtonPanel: true, 
 
    closeText: 'Clear', 
 
    onClose: function(){ 
 
     var event = arguments.callee.caller.caller.arguments[0]; 
 
     \t if ($(event.delegateTarget).hasClass('ui-datepicker-close')) { 
 
     $(this).val(''); 
 
     } 
 
    } 
 
}); 
 
}); 
 

 
// Submit event handler 
 
$("#myForm").on("submit", function(evt){ 
 
    console.log("This code is only reached when all fields are valid."); 
 

 
    evt.preventDefault(); // Cancel the event 
 
    evt.stopPropagation(); // Prevent event bubbling 
 
    
 
    // Perform your AJAX call here 
 
});
.required:before { 
 
    content: '*'; 
 
    color: red; 
 
    margin-right: 5px; 
 
} 
 

 
input[type="text"], select, .datepick { 
 
    box-sizing:border-box; 
 
    width:10em; 
 
} 
 

 
.submit { 
 
    text-align:center; 
 
    margin:1em; 
 
} 
 

 
label { 
 
    display:inline-block; 
 
    width:100px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script> 
 

 
<form name="myForm" id="myForm" method="POST" action="#"> 
 
    <fieldset> 
 
    <legend>Info</legend> 
 
    <div class="formItem"> 
 
     <label for="last_name">Last Name:</label> 
 
     <input type="text" name="frmst_lname" id="frmst_lname" required 
 
      maxlength="30" title="Maximum length 30 characters."> 
 
    </div> 
 
    <div class="formItem"> 
 
     <label for="first_name">First Name:</label> 
 
     <input type="text" name="frmst_fname" id="frmst_fname" required maxlength="30" 
 
      title="Maximum length 30 characters."> 
 
    </div> 
 
    <div class="formItem"> 
 
     <label for="dob">DOB:</label> 
 
     <input type="text" name="frmst_dob" id="frmst_dob" required size="10" maxlength="10" 
 
      placeholder="MM/DD/YYYY" class="datepick"> 
 
    </div> 
 
    <div class="formItem"> 
 
     <label for="sport">Sport:</label> 
 
     <select name="frmst_sport" id="frmst_sport" required> 
 
     <option value="">--Choose Sport--</option> 
 
     <cfoutput query="getSports"> 
 
      <option value="#d_dist#">#d_sname#</option> 
 
     </cfoutput> 
 
     </select> 
 
    </div> 
 
    <div class="submit"> 
 
     <input type="submit" name="frmSubmit" id="frmstSubmit" value="Submit"> 
 
    </div> 
 
    </fieldset> 
 
</form>

+0

我已經嘗試'需要'輸入字段,但我點擊提交後,我看不到任何消息...這是JQuery驗證或其他東西? –

+0

@espresso_coffee這是HTML驗證。不需要JavaScript,也不需要JQuery。這是所有HTML5瀏覽器內置的原生行爲。你有沒有看到我的評論,你必須將你的按鈕更改爲'input type =「submit」',以便驗證被觸發?沒有這個,你永遠不會提交表單。沒有這個,你只是有一個什麼都不做的按鈕。你有沒有嘗試在這裏運行我的代碼片段?那對你有用嗎? –

+0

我改變了類型以提交驗證工作。更改要提交的類型還有另一個問題。該按鈕鏈接到Ajax功能。點擊提交後,我的表單已提交。我如何防止這種情況發生? –

相關問題