РЕДАКТИРОВАТЬ:
Все три переключателя имеют одинаковый атрибут name
....
var html = '<form id="activityQuestionsForm">' +
' <input type="radio" name="choices" id="62"> 62 <br> ' +
' <input type="radio" name="choices" id="63"> 63 <br> ' +
' <input type="radio" name="choices" id="64"> 64 <br> ' +
'<input type="submit">' +
'</form>';
Следовательно, этот плагин считает это группа рад ios как один вход для этой формы . Таким образом, применение правила к каждой из трех кнопок является излишним; Правило проверки и сообщение относятся ко всем трем кнопкам одновременно, а не по отдельности. Фактическая проверка приведет к одному сообщению для группировки кнопок.
Если вам нужно, чтобы каждая кнопка имела свою собственную проверку, то каждая из них нуждается в уникальном name
.
var html = '<form id="activityQuestionsForm">' +
' <input type="radio" name="choices1" id="62"> 62 <br> ' +
' <input type="radio" name="choices2" id="63"> 63 <br> ' +
' <input type="radio" name="choices3" id="64"> 64 <br> ' +
'<input type="submit">' +
'</form>';
См .: jsfiddle.net / fo1jbu0v /
Документация :
Обязательно: A * Атрибут 1028 * требуется для всех входных элементов, нуждающихся в проверке, и плагин не будет работать без этого. Атрибут name
также должен быть уникальным для формы , поскольку плагин отслеживает все входные элементы. Однако для каждой группы элементов радио или флажков будет иметь одинаковые значения name
, поскольку значение этой группировки представляет собой один фрагмент данных формы.
Исходный код OP перед редактированием:
// Attach custom validation method to all radiobuttons
if ($(element).is("#activityQuestionsForm input[type=radio]")) {
$(element).rules("add", {childAnswersVisible : true});
}
Нет смысла помещать .rules()
внутри условия, когда вы можете просто прикрепить его непосредственно к селектору jQuery.
$("#activityQuestionsForm input[type=radio]").rules("add", {childAnswersVisible : true});
Несмотря на это, вся ваша проблема в том, что методы этого плагина прикрепляются к first элементу, когда выбрано несколько элементов.
Правильное решение - обернуть его в .each()
, чтобы присоединить это правило ко всем сопоставленным элементам.
$("#activityQuestionsForm input[type=radio]").each(function() {
$(this).rules("add", {childAnswersVisible : true});
});
Ссылка 1 : jqueryvalidation.org / reference / # link-validating-множественные формы-на -one-page
1 - Несмотря на то, что документация конкретно относится к методу .validate()
, эта концепция применима ко всем методам, предоставляемым этим плагином, включая .rules()
.