2012-02-02 51 views
0

我需要一些帮助来解决我的问题。我有2个输入字段和一个掩码(http://digitalbush.com/projects/masked-input-plugin/),就像> 12/2010(mm/yyyy)。提交表单为无效日期为2的字段

我希望该用户可以在日期有效或空白时注册表单,并在日期无效时在div中发送警报。

它的工作很好,如果我有1场,但是当我有2场,如果用户在第二次输入有效日期,他可以注册形式。

否则,如果您有任何想法,以限制可开始日期之前结束日期...

感谢所有帮助;)

我的HTML代码:

<form id="blockdate"> 
<div>date start: <input class="date" type="text"></div> 
<div>date end: <input class="date2" type="text"></div> 
<div><input class="submit" type="submit"></div> 
<div id="msg"></div> 
</form> 

我的JS代码:

 function verifyDate(datevalue) { 

     var done = false; 

     if(datevalue != null || datevalue != ''){ 
     var tmp = datevalue.split('/'); 
     var month = tmp[0]; 
     var year = tmp[1]; 

     if(month >= 1 && month <= 12){ 
     if(year >= 1990 && year <= 2099){ 
      clean(); 
      done = true; 
      } 
      else { 
      $('#msg').html('Year invalid 1900 - 2099.'); 
      } 
     } else { 
      $('#msg').html('Month invalid'); 
     }  
    } if (datevalue < 1) { 
     done = true; 
    } 

    return done; 
    } 
function verifyDate2(datevalue2) { 

     var done = false; 

     if(datevalue2 != null || datevalue2 != ''){ 
     var tmp = datevalue2.split('/'); 
     var month = tmp[0]; 
     var year = tmp[1]; 

     if(month >= 1 && month <= 12){ 
     if(year >= 1990 && year <= 2099){ 
      clean(); 
      done = true; 
      } 
      else { 
      $('#msg').html('Year invalid 1900 - 2099.'); 
      } 
     } else { 
      $('#msg').html('Month invalid'); 
     }  
    } if (datevalue2 < 1) { 
     done = true; 
    } 

    return done; 
    } 



    function clean() { 
    $('#msg').html(''); 
    } 

    jQuery(function($) { 
    $(".date").mask("99/9999"); 

     $('.blockdate').submit(function() { 
      var datevalue = $('.date').val(); 
      var datevalue2 = $('.date2').val(); 
      return verifyDate(datevalue); 
     }); 

     $(".date").change(function(){ 
     var datevalue = $(this).val(); 
      if(datevalue.length == 7) { 
      verifyDate(datevalue); 
      } else { 
      clean(); 
      } 
     }); 


    jQuery(function($) { 
    $(".date2").mask("99/9999"); 

     $('.blockdate').submit(function() { 
      var datevalue2 = $('.date2').val(); 
      return verifyDate2(datevalue2); 
     }); 

     $(".date2").change(function(){ 
     var datevalue2 = $(this).val(); 
      if(datevalue2.length == 7) { 
      verifyDate2(datevalue2); 
      } else { 
      clean(); 
      } 
     }); 

    }); 

    }); 

回答

1

我可以通过提供一个小的正则表达式来稍微简化您的任务。

`^([0]?\d|1[0-2])/(199\d|20\d{2})$` 

使用这种方式

function TestDate(input) { 
    var pattern = /^([0]?\d|1[0-2])\/(199\d|20\d{2})$/; 
    return pattern.test(input); 
} 

它checkes天气的第一部分,即位于1和12以及1990年和2099年

EDIT

之间的第二部分之间

在您测试了格式的正确性后,您可以看到如下范围

function RangeOk (lowerDate, upperDate) { 
    return GetNumeric(lowerDate) < GetNumeric(upperDate); 
} 

function GetNumeric(input) { 
    var parts = input.split("/"); 
    var yearNum = parseInt(parts[1]) * 12; 
    // Get rid of leading 0 if exists 
    // It can be there as the pattern above allows it. 
    yearNum += parseInt(parts[0].replace(/0(\d)/, "$1")); 
    return yearNum; 
} 

有一个小的数学技巧。

+0

你好Oybek, 感谢您的解释与正则表达式,但我不熟悉的JS,不明白我怎么调用这个函数? ?? 非常感谢 – Tomaw 2012-02-02 14:36:15

+1

用'TestDate'代替'verifyDate'函数 – Oybek 2012-02-02 14:39:47

+0

我无法找到答案,我用你的代码测试了不同的东西,但是找不到解决方案。 我很抱歉再次打扰你... – Tomaw 2012-02-02 15:05:56

1
  1. 你可以使用禁用提交按钮开始进行,直到所有formfields是有效的,那么启用它$("submit").prop("disabled",true);

  2. $(input).blur()检查,如果两个输入值都有效。

  3. 同时获得年度值并加以比较:startdate <= enddate

  4. 启用发送按钮

增强:

if(datevalue2 != null || datevalue2 != '') =>||或许应该&& =>可以写成作为:if(!datevalue2)

var datevalue2 = $('.date2').val(); 
      return verifyDate2(datevalue2); 

=>return verifyDate2($('.date2').val())

编辑:

你只需要一个验证功能,它们是相同的。

试试这个,以防止输入错误formsubmit:

if(year >= 1990 && year <= 2099){ 
     clean(); 
     done = true; 
     $(".submit").prop("disabled",false); 
     } 

    else { 
     $('#msg').html('Year invalid 1900 - 2099.'); 
     $(".submit").prop("disabled",true); 
     } 
    } else { 
     $('#msg').html('Month invalid'); 
     $(".submit").prop("disabled",true); 
    } 
+0

Hello Christoph, 感谢您的帮助,但我无法从提交禁用开始,因为用户有可能不用写入就注册表单任何日期。 这是我的错,我没有在我的信息中说过。 谢谢:) – Tomaw 2012-02-02 14:35:05

+1

没问题,只是把那部分留下来,在任何情况下你都应该纠正那些||。 – Christoph 2012-02-02 14:41:48

相关问题