Ответ 1
Используйте prop()
:
$( '#q' ).prop( 'defaultValue' )
Живая демонстрация: http://jsfiddle.net/kHBsD/8/
Вы видите, 'defaultValue'
не является атрибутом контента (атрибутом HTML), как вы можете убедиться сами, если вы посмотрите на свой исходный код HTML. Вместо этого это свойство элемента DOM HTMLInputElement node.
Смотрите здесь: https://developer.mozilla.org/en/DOM/HTMLInputElement
Атрибуты существуют в исходном коде HTML.
Свойства существуют в дереве DOM.
Когда браузер анализирует исходный код HTML, элемент HTML <input>
интерпретируется и создается соответствующий HTMLInputElement DOM node. Этот элемент DOM содержит десятки свойств ('defaultValue'
является одним из них).
Здесь я переработал ваш код:
$( '.autoclear' ).
focus( function () {
if ( this.value === this.defaultValue ) {
this.value = '';
$( this ).removeClass( 'blur' ).addClass( 'focus' );
}
}).
blur( function () {
if ( this.value === '' ) {
this.value = this.defaultValue;
$( this ).removeClass( 'focus' ).addClass( 'blur' );
}
});
Живая демонстрация: http://jsfiddle.net/kHBsD/9/
prop()
не требуется - у вас есть ссылка this
, поэтому вы можете просто получить доступ к свойству напрямую. Также эти обработчики hover не нужны, просто используйте правило CSS input:hover
.