#javascript #jquery #jquery-plugins #jquery-validate
#javascript #jquery #jquery-плагины #jquery-validate
Вопрос:
Я заметил, что иногда мой код проверки работает неправильно:
var $validator = $("#checkoutForm").validate();
...
if (!$validator.element($sameShippingAddress)) {
...
}
Отладка с помощью Firebug показала, что иногда $validator.element ($sameShippingAddress) возвращает значение undefined (я предполагаю, что оно просто не ожидает возврата ответа), и это будет приниматься за false, даже если элемент допустим.
Если добавить подобный код перед инструкцией if, все работает нормально:
while (validator.element($sameShippingAddress) !== undefined) {
}
Вопрос в том, правильное ли это решение и нет ли лучшего способа справиться с проблемой с самим плагином проверки?
Обновление: я использую http://bassistance.de/jquery-plugins/jquery-plugin-validation /
Комментарии:
1. Я рвал на себе волосы из-за той же проблемы. Ваш вопрос предоставляет мне промежуточное решение (
while
цикл), но было бы неплохо узнать, существует ли лучшее решение.
Ответ №1:
Бесконечный цикл while для переменной validator не является хорошим выбором. Вместо этого используйте приведенный ниже код, который использует таймер Javascript. Вы можете показать анимированную графику обработки / ответа сервера после метода validate().
var validator = $('#resetpassword').validate({///your code...})
doTimer();
function timedCount()
{
t=setTimeout("timedCount()",1000);
}
function doTimer()
{
if (validator === undefined)
{
timedCount();
}
}
if(validator==true)
$('#form').ajaxSubmit(options);
Ответ №2:
Трудно сказать, как вы обрабатываете успешные отправки или используете ли вы класс css для обозначения обязательных полей, но ниже показано, как это делается в демонстрации плагина:
$.validator.setDefaults({
// code to be executed on submit
submitHandler: function() { alert("submitted, replace this with your server request");}
});
$().ready(function() {
// validate the comment form when it is submitted
// use css class .required for fields you want the validator to check
// if your form is valid then it is handled by the submitHandler
// if not the plugin displays error messages
$("#checkoutForm").validate();
//validate can take a block for custom validation and error messages
});
Надеюсь, это поможет вам найти решение, а не просто больше того же самого (также только что понял, что этому вопросу год, но я уже написал это так …)
Ответ №3:
Очевидно, что это не лучшее решение. Вместо этого добавьте
if (!$validator.element($sameShippingAddress)) { …
}
в функции обратного вызова Ajax.
Комментарии:
1. не уверен, понимаю ли я, что вы предлагаете. Я думаю, мне нужно более точно указать, что есть что: элемент является docs.jquery.com/Plugins/Validation/Validator/element и удаленный валидатор docs.jquery.com/Plugins/Validation/Methods/remote и конфигурация удаленного средства проверки генерируется asp.net mvc.