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');