attr('defaultValue') 使用 jQuery 1.6.3 返回未定义

发布于 2024-12-07 14:17:28 字数 1067 浏览 0 评论 0原文

我有一个简单的 jQuery 脚本,可以与 jQuery 1.5.2 完美配合,如您在 this jsFiddle 中看到的那样。应该发生的情况是,当您将焦点移至文本字段时,默认值将被删除。如果将该字段留空,则原始默认值将恢复原状。

http://jsfiddle.net/kHBsD/

但是,相同的代码(仅使用 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')。

jsFiddle 使用 jQuery 1.6.3(不工作)

但是,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.

http://jsfiddle.net/kHBsD/

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.

http://jsfiddle.net/kHBsD/1/

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟─花易冷 2024-12-14 14:17:28

使用 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 引用,因此您可以直接访问该属性。另外,不需要这些悬停处理程序,只需使用 input:hover CSS 规则即可。

Use prop():

$( '#q' ).prop( 'defaultValue' )

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:

$( '.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' );
        }
    });

Live demo: http://jsfiddle.net/kHBsD/9/

prop() is not necessary - you have the this reference, so you can just access the property directly. Also those hover handlers are not needed, just use a input:hover CSS rule.

瞄了个咪的 2024-12-14 14:17:28
var x=$('#q').prop('defaultValue');
var x=$('#q').prop('defaultValue');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文