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"
Запуск имени переменной с $ требуется в PHP, но довольно странно (IMHO) в Javascript. Кроме того, я считаю, что вы называете его «$ модуль» дважды и «модуль» один раз, верно? Кажется, этот код не должен работать.
Кроме того, я не уверен, что это нормальный синтаксис плагина jQuery, но я мог бы добавить комментарии над вашим вызовом addMethod, объясняя, что вы делаете. Даже с вашим текстовым описанием выше сложно следовать коду, потому что я не знаю, к какому набору полей,: заполненному, значению, элементу или селектору относятся. Возможно, большая часть этого очевидна для тех, кто знаком с подключаемым модулем Validate, поэтому используйте суждение о том, какое количество объяснений является правильным.
Возможно, вы могли бы выделить несколько переменных, чтобы самостоятельно задокументировать код; нравиться,
Это отличное решение, Натан. Большое спасибо.
Вот способ заставить приведенный выше код работать на случай, если у кого-то возникнут проблемы с его интеграцией, как это сделал я:
Код в файле 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!
Поскольку форма, над которой я работаю, имеет несколько клонированных регионов с подобными сгруппированными входами, я передал дополнительный аргумент конструктору require_from_group, изменив ровно одну строку вашей функции addMethod:
var commonParent = $(element).parents(options[2]);
и таким образом селектор, идентификатор или имя элемента могут быть переданы один раз:
jQuery.validator.addClassRules("reqgrp", {require_from_group: [1, ".reqgrp", 'fieldset']});
, и валидатор ограничит валидацию элементами с этим классом только внутри каждого набора полей, вместо того, чтобы пытаться подсчитать все .reqgrp классифицирует элементы в форме.
Спасибо, Натан. Вы сэкономили мне массу времени.
Однако я должен заметить, что это правило не поддерживает jQuery.noConflict (). Итак, нужно заменить все $ на jQuery, чтобы работать, скажем, с var $ j = jQuery.noConflict ()
И у меня вопрос: как мне заставить его вести себя как встроенное правило? Например, если я ввожу адрес электронной почты, сообщение «Пожалуйста, введите действительный адрес электронной почты» автоматически исчезает, но если я заполняю одно из полей группы, сообщение об ошибке остается.