【问题标题】: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 可用的情况下必须这样做非常难看。

我愿意接受其他建议。

【问题讨论】:

    标签: jquery attributes version default-value


    【解决方案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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 2013-01-11
      • 2014-01-19
      相关资源
      最近更新 更多