【问题标题】:Time validation (and comparing) using Javascript / JQuery使用 Javascript / JQuery 进行时间验证(和比较)
【发布时间】:2009-08-07 13:37:19
【问题描述】:

首先为在这么多天里创建我的第三个 Javascript 问题而道歉 - 我真的想在这个项目的这个领域推动自己,并且由于我的研究和你的研究,我觉得我的技能正在以相当好的速度发展在这里提供了很棒的帮助,尤其是 redsuqare!

我有一个表格,人们可以在其中输入时间,并有一个掩码可以检查输入的格式是否为 99:99 - 这很好,但理想情况下我想将其限制为不超过23:59!

这是我目前拥有的代码,尽我所能拼凑起来,但不出所料地不起作用......

$.each($('#hoursavailable tr td :checkbox'), function() {

    var $this = $(elem); // cache the object
    var $row = $this.closest('tr'); // find the nearest table row
    if($this.is(':checked')) {
        // do nothing!
    } else {
        $row.each(':text'),function() {
            var splittime = $(this).split(":");
            if(splittime[0] > 22 || splittime[1] > 58) {
                alert('please enter a valid date'); return false;
            }
        }
    }
});

还值得注意的是,每行/tr 有两个输入 - 如果我能以某种方式比较这两个输入,以确保第一个在第二个之前,那将是绝对理想的,但感谢这可能会更多超越我比现在的东西:(

谢谢

【问题讨论】:

    标签: javascript jquery validation date time


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      我认为您所需要的只是以下更改,因为您对文本输入进行了 each 操作,因此您需要获取值并将其拆分。

      $row.find(':text').each(function() {
                  var splittime = $(this).val().split(":");
                  if(splittime[0] > 22 || splittime[1] > 58) {
                          alert('please enter a valid date'); return false;
                  }
      });
      

      但是,为了避免重新发明轮子,为什么不查看validate plugin,您可以在其中配置正则表达式来处理数据验证。

      虽然我很欣赏手卷也是一个很好的学习曲线。

      【讨论】:

      • 非常感谢,我马上去看看验证插件。顺便说一句,错过 val() 的好地方,哎呀!我不确定它是否在运行 each,因为它没有做任何事情,即使我尝试了 'alert(splittime[0]);' - 很抱歉很痛苦
      【解决方案3】:

      当你真的只需要一个时,你会为你的每个人发疯

      这应该让您了解一些如下详述的警告。

          $("#hoursavailable :checked").each(function() {
              var splittime = $(this).parents("tr").find(":text").val().split(":");
              if (splittime[0] > 22 || splittime[1] > 58) {
                  alert('please enter a valid date'); 
                  return false;
              }        
          });
      

      我在这里假设您只有一个文本框(因此 .find(":text") 在父级上。您可以考虑添加一个类,但请记住类选择器很慢。

      这里没有验证,所以你可能想再添加一点,但前提是有效的。

      【讨论】:

      • 非常感谢!只是稍微修改了一下,现在它绝对是一种享受,谢谢! $("#hoursavailable :text").each(function() { $this = $(this); // 缓存对象 var splittime = $this.val().split(":"); if (splittime[ 0] > 22 || splittime[1] > 58) { $this.focus(); $.jGrowl('请输入一个有效日期!不能超过 23:59!', { theme: 'smoke' } ); retVal = false; 返回 false; } });
      【解决方案4】:

      综合不同的方法来检查最大值和格式。

          var timeFieldValue = $(this).val();
          re = /^\d{1,2}:\d{2}([ap]m)?$/;
          if(timeFieldValue != '' && !timeFieldValue.match(re)) {
            alert("Invalid time format: " + timeFieldValue);
            $(this).focus();
            return false;
          }
          var splittime = timeFieldValue.split(":");
          if(splittime[0] > 23 || splittime[1] > 59) {
            alert('Please enter a valid time');
            return false;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 2015-01-09
        • 1970-01-01
        • 2012-05-20
        • 2011-05-23
        相关资源
        最近更新 更多