Проверка jQuery внутри jQuery .each ()

0

У меня много форм для

У меня этот HTML-код

<form method="post"  id="form_commento-[i]" class="form_fancybox_commenti">
    <div class="form-section">
        <span style="position: relative">
            <input type="text" id="commento_form_[i]_commento" name="commento_form_[i][commento]" required="required"/>
            <button type="submit" class="submit-button" id="submit_form_commenti">Commenta</button>
        </span>
    </div>
</form>

Где [i] - индекс

в моем документе готов я

$(document).ready(function() {

    jQuery.validator.addMethod("alphanumeric", function (value, element) {
        return this.optional(element) || /^[a-zA-Z0-9\n\-'àèìòù: <_,. !?()]*$/.test(value);
    },   "error");

    $('.form_fancybox_commenti').each(function(index, numero_form) {

    var theRules = {};

    theRules[
        'commento_form_['+index+'][commento]'] = {alphanumeric: true};


    $(this).validate({
        rules: theRules,
        submitHandler: function(form) {
            save(form);
        }
    });
});

но мои пользовательские правила не работают.

В любом случае, чтобы решить эту проблему?

Теги:
jquery-validate

2 ответа

1
Лучший ответ

Если name commento_form_[i][commento], то вам не хватает набора скобок здесь...

'commento_form_'+index+'[commento]'

=>

'commento_form_['+index+'][commento]'

Однако на данный момент вы еще не определили index поэтому этот метод завершился с ошибкой консоли JavaScript.


Существует очень простая альтернатива этому фрагменту JavaScript. Добавьте class="alphanumeric" к вашим элементам <input>, и ваш код будет уменьшен просто до этого:

$(document).ready(function () {

    jQuery.validator.addMethod("alphanumeric", function (value, element) {
        return this.optional(element) || /^[a-zA-Z0-9\n\-'àèìòù: <_,. !?()]*$/.test(value);
    }, "error");

    $('.form_fancybox_commenti').each(function (index, numero_form) {
        $(this).validate({
            submitHandler: function (form) {
                save(form);
                // alert('save form: ' + index); // for demo
                return false; // blocks default form action
            }
        });
    });

});

ДЕМО: http://jsfiddle.net/XTtTP/


Если вы предпочитаете использовать JavaScript для назначения своих правил, вы также можете использовать метод .rules('add') в jQuery .each(), как .each() ниже, и индексация не требуется:

$('input[name^="commento_form_"]').each(function () {
    $(this).rules('add', {
        alphanumeric: true
    });
});

ДЕМО: http://jsfiddle.net/T776Z/


BTW, в файле additional-methods.js уже есть метод, называемый alphanumeric. См.: http://jsfiddle.net/h45Da/

  • 0
    Большое спасибо. я использую $ ("# commento_form _ [" + index + "] _ commento"). addClass ("буквенно-цифровой"); в каждом
  • 0
    Я хочу алфавитно-цифровой с каким-то специальным символом. еще раз спасибо
0

Это лучшее решение, которое я нашел и использую в своем проекте:

        // Adding rule to each item in commento_form_i list 
        jQuery('[id^=commento_form_]').each(function(e) {
        jQuery(this).rules('add', {
            minlength: 2,
            required: true
            })
        });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню