attr(’defaultValue’)使用jQuery 1.6.3返回undefined

我在jQuery中有一个简单的脚本,与jQuery 1.5.2完美配合,你可以在这个jsFiddle中看到。 应该发生的是,当您将焦点带到文本字段时,将删除默认值。 如果将该字段留空,则将原始默认值放回原位。

http://jsfiddle.net/kHBsD/

但是,相同的确切代码(仅使用jQuery 1.6.3)不起作用。 (不工作意味着默认值保留在文本框中,直到您手动删除它为止,如您在此jsFiddle中所见 。

http://jsfiddle.net/kHBsD/1/

控制台中没有脚本错误,并且该function的其他方面也可以运行。 您可以看到hover()部分在两个jsFiddles中都正常工作。


汇总版(根本问题)

jQuery 1.6.3为.attr('defaultValue')返回undefined

jsFiddle使用jQuery 1.6.3(不工作)

但是,jQuery 1.5.2返回.attr('defaultValue')的预期值。

jsFiddle使用jQuery 1.5.2(工作)


题:

有谁知道为什么会发生这种情况? (对我来说,它看起来像一个jQuery错误。)

以下仍在工作……

 document.getElementById().defaultValue 

…但我认为在jQuery可用的情况下必须这样做是非常难看的。

我愿意接受其他建议。

使用prop()

 $( '#q' ).prop( 'defaultValue' ) 

现场演示: http //jsfiddle.net/kHBsD/8/

您会看到, 'defaultValue'不是内容属性(HTML属性),如果您查看HTML源代码,就可以自己看到。 相反,它是HTMLInputElement DOM元素节点的属性。

请参见: https : //developer.mozilla.org/en/DOM/HTMLInputElement


HTML源代码中存在属性。
DOM树中存在属性。

当浏览器解析HTML源代码时,将解释HTML 元素并创建相应的HTMLInputElement DOM节点。 这个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处理程序,只需使用input:hover CSS规则。

 var x=$('#q').prop('defaultValue');