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

时间:2011-03-31 22:10:03

标签: javascript jquery

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

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

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

11 个答案:

答案 0 :(得分:15)

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

input.val('myNewVal');

确保使用“查看源代码”命令,重新加载页面,或显示已加载的页面。相反,使用DOM查看器 - 右键单击​​input元素并选择“Inspect element”。 (这与Windows中Chrome的“开发工具” - Ctrl + Shift + I 相同< / p>

答案 1 :(得分:7)

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

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

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

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

答案 2 :(得分:4)

使用.val()

input.val("some text");

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

jsfiddle善良。

答案 3 :(得分:3)

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

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

答案 4 :(得分:3)

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

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

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

答案 5 :(得分:2)

请勿使用.attr()更改值,请使用专门为此目的制作的.val()

input.val("new value");

答案 6 :(得分:1)

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

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

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

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

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

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

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

答案 9 :(得分:1)

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

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

适用于jQuery v1.5。* =&gt; v1.6。*,对于其他版本,不进行检查。

答案 10 :(得分:0)

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

所以,

NSMutableDictionary *stringAttributes = [NSMutableDictionary dictionary];

[stringAttributes setObject: [UIFont fontWithName:@"Avenir Book" size:250] forKey: NSFontAttributeName];
[stringAttributes setObject: [UIColor whiteColor] forKey: NSForegroundColorAttributeName];

NSString *placeString = [NSString stringWithFormat:@"Text here."];

CGSize size = [placeString sizeWithAttributes:stringAttributes];
//Create a bitmap context into which the text will be rendered.
UIGraphicsBeginImageContext(size);
//Render the text.
[placeString drawAtPoint:CGPointMake(0.0, 0.0) withAttributes:stringAttributes];
//Retrieve the image.
UIImage *imagene = UIGraphicsGetImageFromCurrentImageContext();

UIImage *mergedImage = _imageView.image;

CGSize newSize = image.size;
UIGraphicsBeginImageContext(newSize);

//Use existing opacity as is.
[mergedImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];

//Apply supplied opacity if applicable.
CGRect drawingRect = (CGRect) {.size = size};
drawingRect.origin.x = (newSize.width - size.width) * 0.01;
drawingRect.origin.y = (newSize.height - size.height) * 0.03;
[imagene drawInRect:drawingRect blendMode:kCGBlendModeNormal alpha:1];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

[_imageView setImage:newImage];
self.imageView.image = newImage;

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

但是

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

返回'newValue'