2015-05-05 4 views
2

Я использую плагин проверки jQuery. У меня есть динамическая форма, созданная на основе 1-5 в зависимости от того, какой номер пользователь выбирает для цикла. Я изо всех сил пытаюсь написать динамическую часть, чтобы каждое поле формы корректно работало в каждом цикле.ColdFusion Dynamic Loop с плагином проверки jQuery Создание динамического правила

<!--- Looping Validation ---> 
<script> 
    $("#form").validate({ 
     focusCleanup: true, 
     focusInvalid: false, 
    rules: { 
phoneNumber_<cfoutput>#Add#</cfoutput>: { 
      required: true, 
      validatePhone: true 
     }, 
}, 
     // Same for other fields 
    messages: { 
phoneNumber_<cfoutput>#Add#</cfoutput>: "This field is required.", 
     // Repeat for other fields 
    } 
}); 

Итак, первый пример, который я попробовал создать, правило работает, но только если он петли один раз. Если пользователь выбирает два или более высоких, он работает только на первом, а не на втором или более высоком цикле.

// Validates Phone Number 
jQuery.validator.addMethod("validatePhone", function(value, element) { 
    return this.optional(element) || /^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$/.test(value); 
}, 'Please enter valid Phone Number.'); 

Затем я пробовал это, и он разбивает RegEx, а также пытается проверить только на первом цикле.

// Validates Phone Number 
jQuery.validator.addMethod("validatePhone", function(phoneNumber_<cfoutput>#Add#</cfoutput>) { 
    var value = new RegExp("^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$"); 
    return phoneNumber_<cfoutput>#Add#</cfoutput>.match(value); 
}, 'Please enter valid Phone Number.'); 

Любая помощь с этим была бы признательна! Заранее спасибо!

+0

Введите 2 и шаг Повсеместно кода с помощью яваскрипта-де-мудак по вашему выбору. –

+0

Возможно, вы уже знаете об этом, но в случае, если вы этого не сделали. Регулярное выражение вашего номера телефона отклоняет некоторые действительные форматы телефонных номеров. ** [Изучите эту скрипту] (http://jsfiddle.net/83yvrwto/1/) **, чтобы понять, что я имею в виду. – radiovisual

ответ

4

Я использую плагин проверки jQuery. У меня есть динамическая форма, созданная на основе 1-5 в зависимости от того, какой номер пользователь выбирает для цикла. Я изо всех сил пытаюсь написать динамическую часть, чтобы каждое поле формы корректно работало в каждом цикле.

Что именно вы говорите о «петле»? Я не вижу петли в вашем коде. Вы не можете вызвать метод .validate() более одного раза в той же форме. Вы только вызываете метод .validate()один раз на вашей форме до Инициализировать плагин. Все последующие вызовы игнорируются. Фактическая проверка данных формы происходит автоматически на основе событий, которые автоматически захвачен плагином. Цикл не нужен и был бы совершенно бесполезен здесь.

Если вам необходимо объявить правила на динамически создаваемых элементах поля, вы должны вызвать the .rules() method сразу после создания новых полей и в любое время после .validate().

Таргетинг все поля, которые «начинаются с» phoneNumber_ ...

$('input[name^="phoneNumber_"]').each(function() { 
    $(this).rules('add', { 
     required: true, 
     validatePhone: true, 
     messages: { // optional 
      required: "custom message for required", 
      validatePhone: "custom message for validatePhone" 
     } 
    }); 
}); 
+0

Будет ли это работать? Ищете частичные имена полей? Я думаю, что было бы разумнее применять имя класса для каждого номера телефонного номера и использовать его как селектор. –

+1

@ AdrianJ.Moreno Да, частичное совпадение будет работать. Вы заметите '^' на первой строке, это не опечатка (никто не сказал, что это так). Он привязывает совпадение к началу, так что флажок с именем «publish_phoneNumber_ok» не совпадает. Совпадение классов точно так же (и часто проще), но это отлично работает. –

+0

Прохладный. Даже не заметила этого. Благодарю. –

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