Проверка нескольких полей формы с одинаковыми именами с помощью плагина jQuery Validate

0

Мне удалось проверить несколько полей формы с одинаковыми именами, такими как first_name[], используя плагин jQuery Validate и это обходное решение (цитируется здесь).

Однако сообщения об ошибках отображаются только для первого экземпляра поля, а не для следующих.

Почему это?

Для записи решение, представленное в ссылках выше, состоит в редактировании jquery.validate.js и изменении содержимого функции checkForm в:

checkForm: function() {
this.prepareForm();
for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
    if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
        for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
                this.check( this.findByName( elements[i].name )[cnt] );
        }
    } else {
        this.check( elements[i] );
    }
}
return this.valid();
}

Затем, используя этот тип параметров при вызове плагина:

rules: {
"field_name[]": "required"
}
Теги:
jquery-validate

1 ответ

1

Ответить OP:

"Мне удалось проверить несколько полей форм с одинаковыми именами, такими как first_name[], используя плагин jQuery Validate и этот обходной путь (цитируется здесь)".

Я настоятельно рекомендую не редактировать исходный код любого плагина.

  • Вы должны убедиться, что никогда не переписываете его при обновлении.

  • Вы создаете путаницу для следующего человека, который работает над проектом.

  • Вы можете ввести любое количество неизвестных ошибок.

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

Кроме того, хак, который вы цитируете, больше трех лет... как вы знаете, что он все еще должен работать (если он когда-либо работал) должным образом в последней версии плагина?

Ответить OP:

"Однако сообщения об ошибках отображаются только для первого экземпляра поля, а не для следующих.

Почему это?"

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

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

Однако вам не нужно вообще ничего делать. Плагин предназначен для обработки name поля, являющегося частью массива... "field[1]", "field[2]" и т.д. Допустимы.

  • Если ваша форма статична, просто создайте уникальные имена полей.

  • Если ваша форма динамическая, используйте инкрементный счетчик, чтобы правильно создать индекс массива, чтобы каждое поле заканчивалось уникальным name.

Ещё вопросы

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