Javascript jQuery.attr(';value';,';new#u value';)不工作?

Javascript jQuery.attr(';value';,';new#u value';)不工作?,javascript,jquery,Javascript,Jquery,我试图使用jQuery动态更改输入的实际HTML值属性。虽然使用了input.attr('value','myNewVal')“查看生成的源代码”。这显示了DOM操作(即调用.val()方法)发生后的源代码,我在处理修改DOM元素的函数/方法时经常使用它 因此,概括一下:[#input_id=输入字段的id] $("#input_id").val("new value"); 然后使用插件查看生成的源代码,您将看到更新的值。这两个attr()和val()都专门处理值属性[2014年2月更新:这在

我试图使用jQuery动态更改输入的实际HTML
属性。虽然使用了
input.attr('value','myNewVal')
由于我稍后将在一些PHP中进行检查,以查看输入是否具有其原始值,因此我需要一种更改实际HTML属性的方法,最好是在jQuery中。还有其他人遇到过这个讨厌的bug吗?你们当中有人知道解决方法吗


我也尝试过使用
.val()
,同样的情况也发生了-基础HTML属性没有改变。

attr
也应该可以工作,特别是因为您确实看到它发生了变化,但也尝试使用它-它更适合于改变值:

input.val('myNewVal');
确保要使用“查看源代码”命令,它会重新加载页面,或在加载页面时显示页面。相反,使用DOM查看器-右键单击输入元素并选择“Inspect element”。(这与Windows中Chrome中的“开发工具”-Ctrl+Shift+I相同)

使用

根据您的评论,
查看源代码
很可能不会更新。如果您仍然获得原始值,则必须进行其他操作,并且很可能需要更多详细信息

goodness.

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

input.val("new value");

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


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

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

如果要更改它(并对照新值进行检查),可以将引用存储在某个位置。最好使用
.data()
方法并检查存储的值


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

它不会更改大多数开发工具的DOM explorer中的值。但是JavaScript仍然会得到当前的值。所以

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

通知您使用.val(“value”)方法的响应是正确的,我知道查看这些更改(在源代码中)的唯一方法是使用并单击“查看源代码”->“查看生成的源代码”。这显示了DOM操作(即调用.val()方法)发生后的源代码,我在处理修改DOM元素的函数/方法时经常使用它

因此,概括一下:[#input_id=输入字段的id]

$("#input_id").val("new value");
然后使用插件查看生成的源代码,您将看到更新的值。

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

如果您真的必须更改实际属性(我很确定您不会这样做),请通过
setAttribute()


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

这不是一个bug。属性值不应更改

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


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

我遇到过这样的情况,jQuery函数
.val()
.attr(“value”,“…”)
对url的值不正确。函数更新用户界面,但对DOM(源代码)不起作用。在这种情况下,应使用:

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

对于jQuery v1.5.*=>v1.6.*,它是正确的,对于其他版本,它没有被检查。

这可能有点离题,但我发现当我在jQuery中使用.data()函数时,该值设置正确,但更改没有反映在开发人员工具中

所以

在开发工具(元素视图)中,仍然显示旧值

但是


返回“newValue”

您是否尝试提交表单并检查PHP的内容?如果您没有看到HTML的变化,这并没有什么区别。您的更改已经完成。应该提到我已经尝试过了,并且它不会影响实际的底层HTML属性。一定要使用
.val()
。jQuery在那里提供了很好的服务,提供了一个公共接口,例如文本区域和输入。我记得与
.attr('value')
有关的一些bug,IE.
.val()
也会处理这些bug,但这并不会增加
input[0].setAttribute('value', 'myNewVal');
jQueryObj[0].setAttribute("value", "...");
$('#element').data('to-update', 'newValue')
$('#element').data('to-update')