Я использую jQuery mt-select для управления автоматически заполненными выборами из списка тысяч возможностей.Добавить submitHandler в jQuery validate() во время выполнения
форма инициализирует с ввода текста, как
<input type="text" class="form-control" id="location[]" data-mt-filter-control="" autocomplete="on" style="width: auto;">
Затем по мере добавления выбора скрытые входы добавляются как
<input type="hidden" name="locationID[1]" value="1786" data-tag-id="1786">
Я хочу, чтобы эти формы добавить JQuery проверки submitHandler после Validate () инициализирован в основном файле JavaScript. Это проверит, чтобы убедиться, что был сделан хотя бы один из необходимых вариантов выбора.
Если существует выбор (или нет), я подтвердил, что $("input[name^='locationID']").length
дает ожидаемые значения. Однако форма верна, независимо от того, существуют ли они или нет, заставляет меня полагать, что submitHandler не добавляется.
В консоли нет ошибок или предупреждений, и validate() ведет себя иначе, как ожидалось, когда класс required
применяется к не скрытым полям.
Так почему же submitHandler не стреляет?
На странице этой формы у меня есть:
<script type="text/javascript">
$(document).ready(function(){
$("form").validate({
submitHandler: function(form) {
if($("input[name^='locationID']").length > 0) {
//Form is valid
alert('form data valid');
form.submit();
}
else {
//Form is invalid
alert('form data invalid');
}
},
errorPlacement: function(error, element){
if(element.attr("name") == "locationID[]"){
error.appendTo($('#errorbox'));
console.log('saw error');
}else{
error.appendTo(element.parent().next());
console.log('other errors');
}
}
});
});
</script>
И в главном файле JS для всех страниц инициализирую Validate() как так:
$("form").validate({
ignore: [], // include hidden fields
errorPlacement: function(error, element) {
if (element.is(":radio")) {
error.appendTo ('#' + element.attr('name') + '_multiError'); // eg rad_22_multiError
} else if (element.is(":checkbox")) {
error.appendTo ('#' + element.attr('name').replace(/[\[\]]+/g,'') + '_multiError');
} else {
error.appendTo(element.parent());
}
},
rules: {
antispam: { equalToParam: "events" }
}
});
два вопроса. Один из описанных ниже @charlietfl ниже ... вы не можете инициализировать плагин несколько раз. Во-вторых, вы не должны делать больше проверки внутри 'submitHandler'. По определению этот обработчик запускается только при нажатии кнопки _, когда форма действительна; совершенно не имеет смысла посылать сообщение «недействительной формы» ... существует множество других возможностей для того, чтобы форма была полностью действительной долгое время перед вызовом 'submitHandler'. – Sparky