attr('defaultValue') 使用 jQuery 1.6.3 返回 undefined
Posted
技术标签:
【中文标题】attr(\'defaultValue\') 使用 jQuery 1.6.3 返回 undefined【英文标题】:attr('defaultValue') is returning undefined using jQuery 1.6.3attr('defaultValue') 使用 jQuery 1.6.3 返回 undefined 【发布时间】:2011-11-29 05:27:16 【问题描述】:我在 jQuery 中有一个简单的脚本,它与 jQuery 1.5.2 完美配合,正如您在 this jsFiddle 中看到的那样。应该发生的是,当您将焦点移到文本字段时,默认值将被删除。如果您将该字段留空,则会将原始默认值放回原处。
http://jsfiddle.net/kHBsD/
然而,同样的代码,只使用了 jQuery 1.6.3,却无法正常工作。 (不工作意味着默认值保留在文本框中,直到您手动删除它,如您在this jsFiddle 中看到的那样。
http://jsfiddle.net/kHBsD/1/
控制台中没有脚本错误,该功能的其他方面都可以运行。您可以看到 hover()
部分在两个 jsFiddles 中都运行良好。
总结版本(根本问题)
jQuery 1.6.3 正在为.attr('defaultValue')
返回undefined
。
jsFiddle using jQuery 1.6.3 (not working)
但是,jQuery 1.5.2 正在返回 .attr('defaultValue')
的预期值。
jsFiddle using jQuery 1.5.2 (working)
问题:
有人知道为什么会这样吗? (在我看来,它就像一个 jQuery 错误。)
以下仍在工作......
document.getElementById().defaultValue
...但我认为在 jQuery 可用的情况下必须这样做非常难看。
我愿意接受其他建议。
【问题讨论】:
【参考方案1】:使用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 <input>
元素并创建相应的 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
引用,因此您可以直接访问该属性。也不需要那些悬停处理程序,只需使用 input:hover
CSS 规则。
【讨论】:
Doh! 现在我记得读过这个。谢谢你的提醒! 使用input:hover
有浏览器版本限制吗?谢谢。
我不关心IE6... 浏览器死,死!【参考方案2】:
var x=$('#q').prop('defaultValue');
【讨论】:
以上是关于attr('defaultValue') 使用 jQuery 1.6.3 返回 undefined的主要内容,如果未能解决你的问题,请参考以下文章
是否可以让空的 RequestParam 值使用 defaultValue?