2

$(#email).attr('value')应该给出输入的原始默认值,但使用 jQuery 1.8.1,给出当前值。为什么是这样?这个改变是什么时候做的?我应该采取什么步骤,这样我才能意识到这些变化,而不是在发现事情没有按预期工作后偶然发现它们。谢谢

http://jsfiddle.net/ufrHD/2/使用 jQuery 1.8.1

http://jsfiddle.net/ufrHD/3/使用 jQuery 1.9.1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> 
        <title>Input</title> 
        <script src="http://code.jquery.com/jquery-1.8.1.js" type="text/javascript"></script> 
        <script type="text/javascript">
            $(function() {
                $("#click").click(function() {alert("$('#email').val()="+$('#email').val()+"\n$('#email').attr('value')="+$('#email').attr('value'));});
            });
        </script>
    </head>

    <body>
        <button id="click">Click</button>
        <input type="email" name="name" id="email" value="email@example.com" />
    </body> 
</html>
4

2 回答 2

3

如http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-以及一些博客文章中所述,更改是在 1.9 中进行的。1.9 之前的旧行为是一个错误。

了解这些更改的最佳方式是阅读博客文章和 api.jquery.com 文档。如果您看到需要澄清的文档问题,请在https://github.com/jquery/api.jquery.com/提交问题或拉取请求。

于 2013-05-07T13:54:48.593 回答
2

$.attr('value')应该返回默认值并不明显。根据经验,如果某些事情看起来不明显,您的里程可能会有所不同。

因此,您不应该使用它来获取默认值。相反,将默认值存储在元素中以供将来检索:

$(function () {
    $("[value]").each(function () {
        $(this).attr("data-def-value", $(this).val());
    });
);

然后你可以使用:

$(element).attr("data-def-value");

编辑:正如 billyonecan 指出的那样,您可以访问元素defaultValue

于 2013-05-07T13:54:55.317 回答