Val() возвращает значение Placeholder вместо фактического значения в IE8,9, когда поле пустое
Атрибут Placeholder, показанный ниже, отлично работает в firefox, но если val() вызывается, когда поле пусто, оно возвращает значение placeholder вместо фактического значения в тексте.
JSFiddle - http://jsfiddle.net/Jrfwr/2/
<input id="tlt" type="text" placeholder="Enter Title" />
ОАО
function placeHolderFallBack() {
if ("placeholder" in document.createElement("input")) {
return;
}
else {
$('[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.val() == input.attr('placeholder')) {
input.addClass('placeholder');
input.val(input.attr('placeholder'));
}
}).blur();
$('[placeholder]').parents('form').submit(function () {
$(this).find('[placeholder]').each(function () {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
}
})
});
}
}
Ответы
Ответ 1
Вы можете переопределить метод val(), но мне не нравится это делать: D
Я написал простую функцию pVal()
, которая выполняет задание
$.fn.pVal = function(){
var $this = $(this),
val = $this.eq(0).val();
if(val == $this.attr('placeholder'))
return '';
else
return val;
}
$(function(){
alert($('input').val())
alert($('input').pVal())
});
http://jsfiddle.net/W7JKt/3/
Ответ 2
В коде JSFiddle вы получаете значение текстового поля в событии BUTTON CLICK... и ваш код, который проверяет, совпадает ли текущее значение текстового поля с заполнителем в событии FORM SUBMIT.
Итак... проблема в том, что событие BUTTON CLICK выполняется перед событием FORM SUBMIT.
В этом коде показан пример получения правильного значения
Надеюсь, что это поможет.
Ответ 3
Его делать с HTML 5. См. эту статью.
http://www.cssnewbie.com/cross-browser-support-for-html5-placeholder-text-in-forms/