Я использую плагин проверки jQuery для проверки формы на моем сайте.jQuery Проверка и конфликт с заполнителем
http://docs.jquery.com/Plugins/Validation
Я также использую следующий код, чтобы обеспечить поддержку заполнителем для браузеров, которые не поддерживают атрибут HTML5 placeholder=""
.
// To detect native support for the HTML5 placeholder attribute
var fakeInput = document.createElement("input"),
placeHolderSupport = ("placeholder" in fakeInput);
// Applies placeholder attribute behavior in web browsers that don't support it
if (!placeHolderSupport) {
$('[placeholder]').focus(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
input.removeClass('placeholder');
}
}).blur(function() {
var input = $(this);
if (input.val() == '') {
input.addClass('placeholder');
input.val(input.attr('placeholder'));
}
}).blur().parents('form').submit(function() {
$(this).find('[placeholder]').each(function() { //line 20
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
}
});
});
}
Когда я представить свою форму, следующие вещи:
В браузерах, которые поддерживают атрибут placeholder
, в validate()
функции пожаров и все работает, как предполагается.
В браузерах, которые не поддерживают атрибут placeholder
, линии 20-25 очищают все «заполнители», а затем срабатывает функция validate()
. Если ошибок нет, страница подчиняется, и все работает так, как предполагается.
В неподдерживаемых браузерах, в случае появления ошибок, соответствующие поля применяются class="error"
, как обычно, но текст заполнителя не возвращается до тех пор, пока событие blur()
не произойдет в определенном поле. Это оставляет эти поля пустыми - и поскольку нет ярлыков (только атрибут placeholder
), пользователям остается угадать, что должно содержать каждое пустое поле до тех пор, пока не произойдет событие blur()
.
Другая проблема, с которой сталкиваются неподдерживаемые браузеры, заключается в том, что, поскольку исправление placeholder изменяет атрибут value
для отображения заполнителя, поля, отмеченные как обязательные, проходят проверку, когда они должны быть неудачными.
Кажется, нет простого способа использования плагина Validation с кодом поддержки заполнителя.
Я ищу либо изменить код поддержки заполнителя, либо добавить функцию submitHandler: {}
в качестве параметра функции validate()
, чтобы заставить это работать в неподдерживаемых браузерах.
Посмотрите мой ответ ниже. – ripper234 2012-01-09 13:16:58