2013-09-01 5 views
1

Я использую jQuery Validation Plugin и хочу запустить свой собственный код, когда плагин обнаруживает действительный или недопустимый ввод.Проверка правильности формы jQuery - success + showErrors

Я понял, что эти два варианта .validate() мне нужны, success и showErrors и я могу получить их как работать самостоятельно:

var validator = $('#form').validate({ 
    rules: { 
    name: "required", 
    email: { 
     required: true, 
     email: true 
    } 
    }, 
success: function() { 
    console.log('success'); 
} 

Это регистрирует success любое время действительный вход сделан. И showErrors корректно работает также:

var validator = $('#form').validate({ 
    rules: { 
    name: "required", 
    email: { 
     required: true, 
     email: true 
    } 
    }, 
showErrors: function() { 
    console.log('error'); 
} 

Но когда я пытаюсь объединить два, error будет авторизован каждый раз, независимо от того, вход правилен:

var validator = $('#form').validate({ 
    rules: { 
    name: "required", 
    email: { 
     required: true, 
     email: true 
    } 
    }, 
success: function() { 
    console.log('success'); 
}, 
showErrors: function() { 
    console.log('error'); 
} 

Порядка опций не имеют какой-либо эффект.

Кто-нибудь знает, почему два варианта не работают вместе и как я могу выполнять свои собственные функции на действительных и недопустимых входах?

+0

У меня возникли проблемы с этим. Хотя подсветка/неопределенность ниже полезна, это не совсем то, чего я хочу достичь. showErrors хорош, потому что он дает вам ошибки в качестве параметра. Выделение/подсветка имеют отдельный вариант использования. Было бы неплохо совместить эти два. – getWeberForStackExchange

ответ

1

Понял, что ... вроде.

Я заменил showErrors на highlight, что позволяет мне запускать обратный вызов для действительных или недействительных записей.

Однако плагин по-прежнему отображает сообщения об ошибках по умолчанию - возможно, поскольку я ничего не делаю с showErrors. Так что мне пришлось взломать, что, установив пустую строку для сообщения на каждом поле:

var validator = $('#form').validate({ 
    rules: { 
    name: "required", 
    email: { 
     required: true, 
     email: true 
    } 
    }, 
    messages: { 
    name: '', 
    email: '' 
    }, 
    success: function() { 
    console.log('success'); 
    }, 
    highlight: function() { 
    console.log('highlight'); 
    } 
} 

Конечно, не настолько чист, как хотелось бы, так что если у кого есть лучший способ, что было бы здорово.

+2

Вы близко. ** Подсказка: 'unhighlight' **. См. Документы. – Sparky

+0

Спасибо - пропустили это в документах. Когда я смотрю «unhighlight» в консоли, он просто запускается каждый раз, когда я нажимаю на поле. Это должно быть так? – cantera

+0

По умолчанию blur, keyup, radio/checkbox click, select change и submit click - это события, которые вызывают проверку. Поскольку «unhighlight» удаляет ошибки, тогда да, сценарии существуют там, где это будет. Постройте пример jsFiddle. – Sparky

3

«showErrors» не вызывается только при обнаружении ошибки, он вызывается каждый раз, когда вы меняете ввод, независимо от введенного вами значения.

«showErrors» получает два параметра: «errorMap» и «errorList». Чтобы проверить, действительно произошла ошибка, вы должны проверить одно из этих значений:

showErrors: function(errorMap, errorList) { 
    if (errorsList.length > 0) { 
    console.log('error'); 
    } 
} 

Вы также можете справиться с «успехом» событием внутри функции showErrors, так как это называется в текущем контексте валидатора.

showErrors: function(errorMap, errorList) { 
    if (errorsList.length == 0) { 
    this.currentElements.addClass("success"); 
    } 
} 
Смежные вопросы