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的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中attr和prop方法的区别

.NET DefaultValue 属性

如何在功能组件的选择标签中使用 defaultValue?

是否可以让空的 RequestParam 值使用 defaultValue?

如何在带有 defaultValue 的可选字段上使用 jQuery Validator 自定义方法?

道具类型失败:“object”类型的道具“defaultValue”无效