为了账号安全,请及时绑定邮箱和手机立即绑定

jQuery .val()vs .attr(“value”)

jQuery .val()vs .attr(“value”)

函数式编程 2019-08-02 16:48:15
jQuery .val()vs .attr(“value”)我原以为这两个是相同的,但它们似乎不是。我一直习惯使用$obj.attr("value")表单字段,但在我正在构建的页面上,$obj.attr("value")不会返回我在字段中输入的文本。但是,$obj.val()确实如此。在不同的页面我已经建立,双方$obj.attr("value")并$obj.val()返回在表单字段中输入的文本。什么可以解释$obj.attr("value")在一个案例中按预期工作但在另一个案例中没有?使用jQuery设置和检索表单字段值的正确方法是什么?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

对象属性和对象属性之间存在很大差异

有关一些差异,请参阅此问题(及其答案):。prop()vs .attr()

要点是.attr(...)只在开始时获取对象值(创建html时)。val()获取对象的属性值可以多次更改。


查看完整回答
反对 回复 2019-08-02
?
RISEBY

TA贡献1856条经验 获得超5个赞

从jQuery 1.6开始,attr()将返回一个属性的原始值(标记本身中的那个)。你需要使用prop()来获取当前值:

var currentValue = $obj.prop("value");

但是,使用val()并不总是相同的。例如,<select>元素的值实际上是其所选选项的值。val()考虑到这一点,但prop()没有。因此,val()优选。


查看完整回答
反对 回复 2019-08-02
?
森林海

TA贡献2011条经验 获得超2个赞

仅供将来参考,我提供了一个很好的例子,可以帮助我们解决疑问:

请尝试以下方法。在这个例子中,我将创建一个文件选择器,可用于选择文件,然后我将尝试检索我选择的文件的名称: HTML代码如下

<html>
    <body>
        <form action="#" method="post">
            <input id ="myfile" type="file"/>
        </form>
        <script type="text/javascript" src="jquery.js"> </script>
        <script type="text/javascript" src="code.js"> </script>
    </body></html>

code.js文件包含以下jQuery代码。尝试逐个使用两个jQuery代码片段并查看输出。

带attr的jQuery代码('value'):

$('#myfile').change(function(){
    alert($(this).attr('value'));
    $('#mybutton').removeAttr('disabled');});

带val()的jQuery代码:

$('#myfile').change(function(){
    alert($(this).val());
    $('#mybutton').removeAttr('disabled');});

输出:

带有attr('value')的jQuery代码的输出将是'undefined'。带有val()的jQuery代码输出将是您选择的文件名。

说明:现在您可以轻松理解最佳答案想要表达的内容。带有attr('value')的jQuery代码的输出将是'undefined',因为最初没有选择文件,所以值是未定义的。最好使用val(),因为它获取当前值。

为了了解返回未定义值的原因,请在HTML中尝试此代码,您将看到attr。('value')始终返回'test',因为该值为'test',之前未定义。

<input id ="myfile" type="file" value='test'/>

我希望它对你有用。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 407 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信