Валидатор Jquery против двумерных массивов - PullRequest
0 голосов
/ 12 августа 2011

Я просто начну с примера моей проблемы:

<form>
    <input name="course[0][name]" />
    <input name="course[0][type]" />

    <input name="course[1][name]" />
    <input name="course[1][type]" />

    ...
    ...
</form>

obs: это, конечно, упрощено.

Итак ...как я могу проверить это, так как я не могу предсказать название?Есть ли способ использовать регулярные выражения или что-то?Утопический пример:

rules: {
    /course\[([0-9]+)\]\[name\]/: {
        required: true
    }
}

Я не смог найти решение в документации, так как это немного сбивает с толку.спасибо (:

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Итак, я провел небольшой поиск, и похоже, что ключи в объекте правил являются простыми селекторами jQuery. Согласно этому вопросу , существует фильтр регулярных выражений, который можно использовать. Между ними должно работать ваше регулярное выражение.


Оригинальная идея:

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

Если это не вариант, вы можете использовать jQuery:

var rules = {
 // simple rule, converted to {required:true}
 name: "required",
 // compound rule
 email: {
   required: true,
   email: true
 }
 // whatever
}
// obviously, for just required, there are easier ways
var checkRules = {required:true}; 
$('#form-id input').each(function(i, elem)
{
   /check\[\d\]\[(name|type)\]/.test(elem.name)
   rules[elem.name] = checkRules
});
1 голос
/ 12 августа 2011

В качестве альтернативы вы можете сделать что-то вроде этого

$.validator.addClassRules({
    inputName: {
        required: true,
        minLength: 5
    },
    inputType: {
        required: true,
        remote: "remoteurl"
    }
});
<input name="course[0][name]" class="inputName"/>
<input name="course[0][type]" class="inputType"/>
0 голосов
/ 12 августа 2011

Дополнительный обходной путь: по умолчанию вы можете указать класс с именем required в обязательных полях.


Другой вариант - заполнить опции rules программно (завершено).код в this gist ):

Предполагается простой пример HTML со следующим телом:

<body>
    <form id="example">
    <input  name="course[0][name]" />
    <input  name="course[0][type]" />

    <input  name="course[1][name]" />
    <input  name="course[1][type]" />

    <input type="submit" name="some_name" value="Go" id="some_name">
    </form>
</body>

Соответствующий javascript для определения соответствующих элементов с помощью filter :

    $(document).ready(function(){

        var options = { rules : {} }

        // put your regex in here ...
        var courses = $('input').filter(function(){
            return this.name.match(/course\[([0-9]+)\]\[name\]/);
        });

        for (var i = courses.length - 1; i >= 0; i--){
            options["rules"][courses[i].name] = { required : true };
        };

        $("#example").validate(options);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...