jQuery Проверяет - требуют, чтобы по крайней мере одно поле в группе было заполнено

Google говорит что Результаты 1 - 10 из приблизительно...

3,160 for +word +wrap +email +"80 characters"
2,820 for +word +wrap +email +"50 characters"
1,790 for +word +wrap +email +"60 characters"
1,720 for +word +wrap +email +"70 characters"
1,540 for +word +wrap +email +"100 characters"
1,250 for +word +wrap +email +"65 characters"
1,120 for +word +wrap +email +"40 characters"
  962 for +word +wrap +email +"75 characters"
  836 for +word +wrap +email +"72 characters"
98
задан 22 revs, 2 users 82% 23 May 2017 в 12:34
поделиться

4 ответа

Запуск имени переменной с $ требуется в PHP, но довольно странно (IMHO) в Javascript. Кроме того, я считаю, что вы называете его «$ модуль» дважды и «модуль» один раз, верно? Кажется, этот код не должен работать.

Кроме того, я не уверен, что это нормальный синтаксис плагина jQuery, но я мог бы добавить комментарии над вашим вызовом addMethod, объясняя, что вы делаете. Даже с вашим текстовым описанием выше сложно следовать коду, потому что я не знаю, к какому набору полей,: заполненному, значению, элементу или селектору относятся. Возможно, большая часть этого очевидна для тех, кто знаком с подключаемым модулем Validate, поэтому используйте суждение о том, какое количество объяснений является правильным.

Возможно, вы могли бы выделить несколько переменных, чтобы самостоятельно задокументировать код; нравиться,

3
ответ дан 24 November 2019 в 05:18
поделиться

Это отличное решение, Натан. Большое спасибо.

Вот способ заставить приведенный выше код работать на случай, если у кого-то возникнут проблемы с его интеграцией, как это сделал я:

Код в файле additional-methods.js :

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
...// Nathan's code without any changes
}, jQuery.format("Please fill out at least {0} of these fields."));

// "filone" is the class we will use for the input elements at this example
jQuery.validator.addClassRules("fillone", {
    require_from_group: [1,".fillone"]
});

Код внутри файла html :

<input id="field1" class="fillone" type="text" value="" name="field1" />
<input id="field2" class="fillone" type="text" value="" name="field2" />
<input id="field3" class="fillone" type="text" value="" name="field3" />
<input id="field4" class="fillone" type="text" value="" name="field4" />

Не забудьте включить файл additional-methods.js!

21
ответ дан 24 November 2019 в 05:18
поделиться

Поскольку форма, над которой я работаю, имеет несколько клонированных регионов с подобными сгруппированными входами, я передал дополнительный аргумент конструктору require_from_group, изменив ровно одну строку вашей функции addMethod:

var commonParent = $(element).parents(options[2]);

и таким образом селектор, идентификатор или имя элемента могут быть переданы один раз:

jQuery.validator.addClassRules("reqgrp", {require_from_group: [1, ".reqgrp", 'fieldset']});

, и валидатор ограничит валидацию элементами с этим классом только внутри каждого набора полей, вместо того, чтобы пытаться подсчитать все .reqgrp классифицирует элементы в форме.

2
ответ дан 24 November 2019 в 05:18
поделиться

Спасибо, Натан. Вы сэкономили мне массу времени.

Однако я должен заметить, что это правило не поддерживает jQuery.noConflict (). Итак, нужно заменить все $ на jQuery, чтобы работать, скажем, с var $ j = jQuery.noConflict ()

И у меня вопрос: как мне заставить его вести себя как встроенное правило? Например, если я ввожу адрес электронной почты, сообщение «Пожалуйста, введите действительный адрес электронной почты» автоматически исчезает, но если я заполняю одно из полей группы, сообщение об ошибке остается.

0
ответ дан 24 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: