jQuery .attr(’value’,’new_value’)不工作?

我试图使用jQuery动态更改输入的实际HTML value属性。 虽然使用input.attr('value', 'myNewVal'); 可以直观地更改它,当我使用Chrome中的开发人员工具检查源时,HTML属性没有改变。

由于我稍后在某些PHP中进行检查以查看输入是否具有其原始值,因此我需要一种更改实际HTML属性的方法,理想情况是在jQuery中。 有没有其他人遇到这个烦人的错误,你们中的任何人都知道一个解决方法吗?

我也尝试过.val() ,同样的事情发生了 – 底层的HTML属性没有改变。

attr应该工作,特别是因为你看到它发生了变化,但也尝试使用val – 它更适合更改值:

 input.val('myNewVal'); 

确保不要使用“查看源”命令,重新加载页面,或显示加载时的页面。 相反,使用DOM查看器 – 右键单击​​input元素并选择“Inspect element” 。 (这与“开发工具”相同 – 在Windows中的Chrome中按Ctrl + Shift + I

attr()val()专门处理value 属性 [更新2014年2月:这在jQuery 1.6之前是正确的但是自1.6引入prop()以来不是真的 ,而不是属性。 value属性仅指定输入的初始值。 一旦输入中的实际文本发生更改(通过用户输入或脚本),value属性和属性将完全独立运行。 在几乎所有情况下,这都无关紧要,因为它几乎总是您想要的当前值(并且它是提交给服务器的值)。

如果你真的必须改变实际的属性(我很确定你没有),可以通过setAttribute()

 input[0].setAttribute('value', 'myNewVal'); 

请注意,IE <8(以及IE 8中的兼容模式)已经破坏了对属性映射到属性的getAttribute()setAttribute()支持,因此上述内容不适用于这些浏览器。

使用.val()

 input.val("some text"); 

根据您的评论, view source很可能不会更新。 如果您仍然获得原始值,则必须继续进行其他操作,并且最有可能需要更多详细信息。

jsfiddle善良。

那是因为开发人员工具不刷新。 这是这些工具中众所周知的错误,包括Opera,Safari和Firebug(后者是另一个问题)。

据我所知,您可以右键单击源树窗口并单击“刷新”。 这不会刷新页面,只是源视图。 虽然这个“修复”在firebug中不起作用。

这不是一个错误。 价值归属不应该改变。

input控件有点特殊。 根据HTML规范, value content属性给出了input元素的默认值。 您可以在DOM资源管理器中看到以编程方式设置或由用户更改的实际控制值。 重置表单时,元素的值将设置为value content属性的value 。 (这里有太多的值:))

这是所有VISIBLE输入类型的标准行为。 (尝试设置HIDDEN元素的值,值内容属性将在Firefox中更新…至少)。

不要使用.attr()来更改值,使用.val() ,它是专门为此目的而制作的:

 input.val("new value"); 

它不会改变大多数开发工具的DOM资源管理器中的值。 但JavaScript仍将获得当前值。 所以

 var newValue = 'new'; $(sel).val(newValue); newValue == $(sel).val(); // true 

他们通知您使用.val(“value”)方法的响应是正确的,我知道看到这些更改的唯一方法(在源代码中)是使用Firefox Web Developer Plugin并单击“View Source” – > “查看生成的来源”。 这显示了DOM操作(即调用.val()方法) 之后的源代码, 使用修改DOM元素的函数/方法时,我经常使用它。

所以回顾一下:[#input_id =输入字段的ID]

 $("#input_id").val("new value"); 

然后使用该插件查看生成的源,您将看到更新的值。

开发工具向您显示从服务器到达的源代码( 对于value属性 ),因此您可以看到真正原始的值。

如果要更改它( 并检查新值 ),可以在某处存储引用。 最好的方法是使用.data()方法并检查该存储的值。

出于使用目的( 通过JS提交或访问它 ),通过.attr().val()方法更改值应该足够了。

我有一个案例,其中jQuery函数.val().attr("value", "...")与url的值不正确。 函数更新用户界面,但它不会影响DOM(源)。 在这种情况下应该使用:

 jQueryObj[0].setAttribute("value", "..."); 

它适用于jQuery v1.5。* => v1.6。*,对于其他版本,它不会被检查。

这可能稍微偏离主题,但我发现当我在jQuery中使用.data()函数时,值设置正确,但更改未反映在开发人员工具中。

所以,

 $('#element').data('to-update', 'newValue') 

在开发人员工具(Elements视图)中仍显示旧值。

 $('#element').data('to-update') 

返回’newValue’