我正在尝试使用jQuery动态更改输入的实际HTML value
属性。虽然使用input.attr('value', 'myNewVal');
可以直观地更改它,但是当我使用Chrome中的开发者工具检查来源时,HTML属性没有更改。
由于我稍后会在某些PHP中进行检查以查看输入是否具有其原始值,因此我需要一种更改实际HTML属性的方法,理想情况是在jQuery中。有没有其他人遇到这个烦人的错误,你们中的任何人都知道一个解决方法吗?
我也试过.val()
,同样的事情发生了 - 基础HTML属性没有改变。
答案 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'