有没有一种方法来简化功能,并一次检查所有的输入框,而不是一个一个的

问题描述:

我有一个JavaScript函数验证日期的输入。日期输入必须是DD/MM/YYYY。我试图阻止用户输入DD/MM/YY。 当我在回发期间点击表单的提交按钮时,我正在调用该函数。我在表单标签中提交了一个返回的函数。我为每个日期输入框逐个检查,如果有错误,我将返回false。这只会逐一检查每个框。 但是,我希望立即检查所有日期输入框,并列出所有错误的输入框,而不是一个一个地列出,如果发现错误,我也希望停止回发,我该怎么做?请帮忙。有没有一种方法来简化功能,并一次检查所有的输入框,而不是一个一个的

我在onsubmit和表单标签中放置函数。

<form class="form-horizontal" action="tmemply_det.asp" method="post" onsubmit="return validatedt();"> 

我有5个日期输入,这里是他们

<div class="form-group"> 
    <label class="col-sm-3 control-label">Date Join : </label> 
    <div id="div_dt_join" class="col-sm-5 col-lg-3"> 
     <div class="input-group"> 
     <input id="dt_join" name="dt_join" value="<%=dt_join%>" type="text" class="form-control" date-picker> 
     <div class="input-group-addon"> 
      <i class="fa fa-calendar"></i> 
     </div> 
     </div> 
     <span id="errdt_join" class="help-block"></span> 
    </div> 
</div> 

的一个JavaScript函数

function validatedt(){ 

    var input = document.getElementById("dt_join").value; 
    var pattern =/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/; 

    if (pattern.test(input)==false){ 
     alert("Date Join format is incorrect, please key in DD/MM/YYYY"); 
     document.getElementById('div_dt_join').className += ' has-error' 
     document.getElementById("errdt_join").innerHTML = "Please key in DD/MM/YYYY" 
     return false; 
     } 

    var input = document.getElementById("dt_confirm").value; 
    var pattern =/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/; 

    if (input.length!=0 && pattern.test(input)==false){ 
     alert("Date Confirm format is incorrect, please key in DD/MM/YYYY"); 
     document.getElementById('div_dt_confirm').className += ' has-error' 
     document.getElementById("errdt_confirm").innerHTML = "Please key in DD/MM/YYYY" 
     return false; 
     } 

    var input = document.getElementById("dt_resign").value; 
    var pattern =/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/; 

    if (input.length!=0 && pattern.test(input)==false){ 
     alert("Date Resign format is incorrect, please key in DD/MM/YYYY"); 
     document.getElementById('div_dt_resign').className += ' has-error' 
     document.getElementById("errdt_resign").innerHTML = "Please key in DD/MM/YYYY" 
     return false; 
     } 

    var input = document.getElementById("dt_DOB").value; 
    var pattern =/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/; 

    if (pattern.test(input)==false){ 
     alert("Date of Birth format is incorrect, please key in DD/MM/YYYY"); 
     document.getElementById('div_dt_DOB').className += ' has-error' 
     document.getElementById("errdt_DOB").innerHTML = "Please key in DD/MM/YYYY" 
     return false; 
     } 

    var input = document.getElementById("dt_WorkPEx").value; 
    var pattern =/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/; 

    if (input.length!=0 && pattern.test(input)==false){ 
     alert("Work Permit Expiry Date format is incorrect, please key in DD/MM/YYYY"); 
     document.getElementById('div_dt_WorkPEx').className += ' has-error' 
     document.getElementById("errdt_WorkPEx").innerHTML = "Please key in DD/MM/YYYY" 
     return false; 
     }  
} 

循环是你的朋友。

function validatedt(){ 
    var success = true; 
    var inputData = ['Join', 'Confirm', 'Resign', 'of Birth', 'Work Permit Expiry']; 
    for (var i = 0; i < inputData.length; i++) { 
    var key = inputData[i].toLowerCase(); 
    var msg = "Date " + inputData[i]; 

    //Deal with edge cases where naming doesn't follow convention 
    if (inputData[i] === 'of Birth') { 
     key = 'DOB'; 
    } 
    else if (inputData[i] === 'Work Permit Expiry') { 
     key = 'WorkPEx'; 
     msg = inputData[i]; 
    } 

    var input = document.getElementById("dt_" + key).value; 
    var pattern =/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/; 

    if (pattern.test(input)==false){ 
     alert(msg + " format is incorrect, please key in DD/MM/YYYY"); 
     document.getElementById('div_dt_' + key).className += ' has-error' 
     document.getElementById("errdt_" + key).innerHTML = "Please key in DD/MM/YYYY" 
     success = false; 
    } 
    } 
    return success; 
} 

为了更新多个错误,我们不会马上返回错误。相反,我们存储一个值为true的变量“success”,所以如果一切正常,它将返回true。如果有任何错误,它会返回false,因为我们在检测到错误时更改变量。一旦我们完成了所有的检查,我们只会返回。

+0

嗨OwChallie,非常感谢您的快速回复,我已经尝试过您的代码,但它仍然通过输入检查输入。是否有办法一次检查一页中的所有输入并提示那些不正确的输入?换句话说,如果有2个不正确的输入,我可以直接提示用户错误输入而不是一个接一个? –

+0

当然,我已经相应地更新了答案。 – OwChallie