attr('defaultValue')使用jQuery 1.6.3返回undefined

Spa*_*rky 11 jquery attributes version default-value

我在jQuery中有一个简单的脚本,与jQuery 1.5.2完美配合,你可以在这个jsFiddle中看到.应该发生的是,当您将焦点带到文本字段时,将删除默认值.如果将该字段留空,则将原始默认值放回原位.

http://jsfiddle.net/kHBsD/

但是,相同的确切代码(仅使用jQuery 1.6.3)不起作用.(不工作意味着默认值保留在文本框中,直到您手动删除它为止,如您在此jsFiddle中所见.

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

控制台中没有脚本错误,并且该功能的其他方面也可以运行.您可以hover()在两个jsFiddles中看到该部分正常工作.


汇总版(根本问题)

jQuery的1.6.3正在恢复undefined.attr('defaultValue').

jsFiddle使用jQuery 1.6.3(不工作)

但是,jQuery 1.5.2正在返回期望的值.attr('defaultValue').

jsFiddle使用jQuery 1.5.2(工作)


题:

有谁知道为什么会发生这种情况?(对我来说,它看起来像一个jQuery错误.)

以下仍在工作......

document.getElementById().defaultValue
Run Code Online (Sandbox Code Playgroud)

...但我认为在jQuery可用的情况下必须这样做是非常难看的.

我愿意接受其他建议.

Šim*_*das 25

用途prop():

$( '#q' ).prop( 'defaultValue' )
Run Code Online (Sandbox Code Playgroud)

现场演示: http ://jsfiddle.net/kHBsD/8/

您看,'defaultValue'如果您查看HTML源代码,则不是内容属性(HTML属性),您可以自己看到.相反,它是HTMLInputElement DOM元素节点的属性.

请参见:https://developer.mozilla.org/en/DOM/HTMLInputElement


HTML源代码中存在属性.
DOM树中存在属性.

当浏览器解析HTML源代码时,将<input>解释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' );
        }
    });
Run Code Online (Sandbox Code Playgroud)

现场演示: http ://jsfiddle.net/kHBsD/9/

prop()没有必要 - 你有this参考,所以你可以直接访问该属性.此外,不需要那些悬停处理程序,只需使用input:hoverCSS规则.

  • 我不关心IE6 ... _die浏览器,死!_ (2认同)