Проверка времени (и сравнение) с использованием Javascript / JQuery - PullRequest
2 голосов
/ 07 августа 2009

Прежде всего, извинитесь за создание моего третьего вопроса по 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;
            }
        }
    }
});

Также стоит отметить, что в строке / три есть два входа - было бы абсолютно идеально, если бы я мог как-то сравнить два, чтобы убедиться, что первый находится перед вторым, но учтите, что это может быть даже больше вне меня, чем нынешние вещи: (

Спасибо

Ответы [ 4 ]

3 голосов
/ 07 августа 2009

Это может быть то, что вы ищете-

http://www.the -art-of-web.com / JavaScript / проверки-дата /

3 голосов
/ 07 августа 2009

Я думаю, что все, что вам нужно, - это следующее изменение, поскольку вы выполняете каждый из них вокруг текстовых входов, поэтому вам нужно вывести значение и разделить его.

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

Однако, чтобы спасти себя, заново изобретая колесо, почему бы не заглянуть в плагин проверки , где вы можете настроить выражения регулярных выражений для проверки данных.

Хотя я действительно ценю раскатывание рук, это также хорошая кривая обучения.

1 голос
/ 07 августа 2009

Ты сходишь с ума от своих эйчей, когда тебе действительно нужен только один

Это должно помочь вам сделать несколько оговорок, как описано ниже.

    $("#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") для родителя. Вы можете рассмотреть возможность добавления класса, но имейте в виду, что селекторы медленно.

Здесь нет подтверждения, так что вы можете добавить немного больше, однако предпосылка работает.

0 голосов
/ 16 декабря 2011

Синтез из разных методов, чтобы проверить макс и форматирование вместе.

    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...