attr('defaultValue') 使用 jQuery 1.6.3 返回未定义
我有一个简单的 jQuery 脚本,可以与 jQuery 1.5.2 完美配合,如您在 this jsFiddle 中看到的那样。应该发生的情况是,当您将焦点移至文本字段时,默认值将被删除。如果将该字段留空,则原始默认值将恢复原状。
但是,相同的代码(仅使用 jQuery 1.6.3)并不相同在职的。 (不起作用意味着默认值保留在文本框中,直到您手动将其删除,如 this jsFiddle 中所示。
< a href="http://jsfiddle.net/kHBsD/1/">http://jsfiddle.net/kHBsD/1/
控制台中没有脚本错误,功能的其他方面都可以运行你可以看到。 hover()
部分在两个 jsFiddles 中都工作正常。
摘要版本(根本问题)
jQuery 1.6.3 返回 undefined
。 .attr('defaultValue')。
但是,jQuery 返回 .attr('defaultValue')
的预期值。
1.5.2使用 jQuery 1.5.2 工作)
问题:
有谁知道为什么会发生这种情况?(对我来说这看起来像是一个 jQuery 错误。)
以下内容仍在工作......
document.getElementById().defaultValue
但我认为它是非常丑陋必须在哪里这样做jQuery 可用。
我愿意接受其他建议。
I have a simple script in jQuery that works perfectly with jQuery 1.5.2 as you can see in this jsFiddle. What is supposed to happen is that when you bring focus to the text field, the default value is removed. And when if you leave the field blank, the original default value is put back in place.
However, the same exact code, where only jQuery 1.6.3 is used instead, is not working. (Not working means that the default value remains in the text box until you manually delete it as you can see in this jsFiddle.
There are no script errors in the console and other aspects of the function are operational. You can see the hover()
portion is working fine in both jsFiddles.
Summarized Version (the Root Problem)
jQuery 1.6.3 is returning undefined
for .attr('defaultValue')
.
jsFiddle using jQuery 1.6.3 (not working)
However, jQuery 1.5.2 is returning the expected value for .attr('defaultValue')
.
jsFiddle using jQuery 1.5.2 (working)
Question:
Does anyone know why this would be happening? (It looks like a jQuery bug to me.)
The following is still working...
document.getElementById().defaultValue
...but I think it's pretty ugly to have to do that where jQuery is available.
I'm open to other suggestions.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
prop()
:现场演示: 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'
是其中之一)。在这里,我重构了您的代码:
现场演示: http://jsfiddle.net/kHBsD/9/
prop()
不是必需的 - 您拥有this
引用,因此您可以直接访问该属性。另外,不需要这些悬停处理程序,只需使用input:hover
CSS 规则即可。Use
prop()
:Live demo: http://jsfiddle.net/kHBsD/8/
You see,
'defaultValue'
is not a content attribute (HTML attribute) as you can see for yourself if you look at your HTML source code. Instead, it's a property of the HTMLInputElement DOM element node.See here: https://developer.mozilla.org/en/DOM/HTMLInputElement
Attributes exist in the HTML source code.
Properties exist in the DOM tree.
When the browser parses the HTML source code, the HTML
<input>
element is interpreted and a corresponding HTMLInputElement DOM node is created. This DOM element contains dozens of properties ('defaultValue'
being one of them).Here, I've refactored your code:
Live demo: http://jsfiddle.net/kHBsD/9/
prop()
is not necessary - you have thethis
reference, so you can just access the property directly. Also those hover handlers are not needed, just use ainput:hover
CSS rule.