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’