2012-09-13 6 views
0

Я использую плагин проверки jQuery для проверки того, находится ли последовательность из трех входов даты (например) в порядке возрастания. Мой подход состоит в том, чтобы написать цикл, который сравнивает даты ввода сверху вниз (сначала проверьте 1-й и 2-й, затем проверьте 2-й и 3-й).Специальная проверка jQuery, сравнивающая последовательности нескольких входов

Мой вопрос:

  1. сколько раз мне нужно применить это правило проверки? В настоящее время I применил это правило к первому входу. Хотя, он проверил, не является ли или нет , а не мои 3 входа. Сообщения об ошибках всегда отображались рядом с первым входом . Независимо от местоположения ошибки.
  2. Следует ли мне изменить функцию, чтобы сравнить только входы VS ее преемника и применить все входы, кроме последнего?

обновление новый вопрос ... Если я пойду с вопросом 2. Мне нужно применить это правило validaton N-1 раз для необходимых элементов (я также построить новый класс). Мой новый вопрос заключается в том, как сообщить jQuery, какие две даты должны быть сопоставлены (первая дата проверки 1 и дата2, вторая дата проверки 2 и дата 3)? DEMO

HTML (таблица форма с тремя датами входов)

<form id="form1"><table><tr class = "app_dates"><th><label for = "id_Date_apt"> Application Date 1 (MM/DD): </label></th> <td> <input id = "id_Date_apt" type = "text" value = "01/11" name = "Date_apt"/></td></tr> 
<tr class = "app_dates"><th><label for = "id_Date_apt"> Application Date 2 (MM/DD): </label></th> <td> <input id = "id_Date_apt2" type = "text" value = "12/12" name = "Date_apt2"/></td></tr> 
<tr class = "app_dates"><th><label for = "id_Date_apt"> Application Date 3 (MM/DD): </label></th> <td> <input id = "id_Date_apt3" type = "text" value = "03/13" name = "Date_apt3"/></td></tr> 
<tr><td><input type="submit" value="Submit"><input type="reset" value="Reset"></td></tr></table></form> 

JS

$(document).ready(function() { 
    //create a function used compare the sequence of input values 
    function isDate() { 
    var siz = $('input[id^="id_Date_"]').size() 
    date = [] 
    temp_f = 0 

// this for loop compares the secquences of application dates in pairs  
    for (var i = 0; i < siz - 1; i++) { 
     j = i + 1 
     var date1_m = parseFloat($('input[id^="id_Date_apt"]:eq(' + i + ')').val().slice(0, 2)) 
     var date2_m = parseFloat($('input[id^="id_Date_apt"]:eq(' + j + ')').val().slice(0, 2)) 
     var date1_d = parseFloat($('input[id^="id_Date_apt"]:eq(' + i + ')').val().slice(3, 5)) 
     var date2_d = parseFloat($('input[id^="id_Date_apt"]:eq(' + j + ')').val().slice(3, 5)) 
     var date1_full = new Date(1960, date1_m - 01, date1_d) 
     var date2_full = new Date(1960, date2_m - 01, date2_d) 

     if (date1_full > date2_full) { 
      temp = 0 
     } 
     else { 
      temp = 1 
     } 
     temp_f = temp_f + temp 
    } //end of for loop 

    if (temp_f != siz-1) { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

//validation//// 
$.validator.addMethod("dateFormat", function(value, element) { 
    return isDate(); 
}, "Inputs are not in sequence"); 

$("#form1").validate({ 
    submitHandler: function(form) { 
     SubmittingForm() 
    }, 
    rules: { 
     //should I add the validation rule for Date_apt2 and Date_apt3??  
     Date_apt: { 
      dateFormat: true 
     } 
    } 
}) 

})​ 

+0

Я бы сказал, что да, вопрос 2 для более гибкой системы, но перевернутый. Каждый должен проверить его перед тем, как это, скорее всего, будет лучше соответствовать потоку взаимодействия с пользователем. Тогда для вопроса 1 это означает, что вы применяли бы логику всякий раз, когда меняли # 2 или # 3 (что снова должно быть более интуитивным). –

ответ

0

Что я хотел бы сделать, это проверить каждую дату от своего предшественника. Поскольку люди обычно заполняют формы сверху вниз, я бы подумал, что дата в паре будет неправильной, когда они не работают. Но в любом случае все в порядке.

Вам не нужно указывать явное правило для каждой даты в вызове .validate(). Если вы укажете элементу формы имя класса, которое соответствует методу проверки, метод будет вызываться автоматически. Так что просто отдайте все, кроме последнего или первого date_aptN элементов класса dateFormat.

+0

спасибо за предложение. Если я перейду к вопросу 2. Мне нужно применить это правило правильной строки n-1 раз для необходимых элементов (я также могу построить новый класс). Мой новый вопрос заключается в том, как сообщить jQuery, какие две даты должны быть сопоставлены (первая дата проверки 1 и дата2, вторая дата проверки 2 и дата 3)? –

+0

Вам не нужно делать это N-1 раз, плагин автоматически применяет его ко всем элементам, которые соответствуют классу. Ваш собственный метод проверки получает элемент, который проверяется как аргумент. Он может использовать '$ (elem) .closest (" tr "). Prev(). Find (" dateClass "). Val()', чтобы получить предыдущую дату, чтобы сравнить их. – Barmar

Смежные вопросы