jQuery .val更改不会更改输入值


103

我有一个HTML输入,其值中包含一个链接。

<input type = 'text' value = 'http://www.link.com' id = 'link' />

我正在使用jQuery更改某个事件的值。

$('#link').val('new value');

上面的代码更改了文本框的值,但未更改代码中的值(value ='http://www.link.com'保持不变)。我还需要=来更改值。


你是什么意思in the code?您是否正在查看页面的原始(因此,未修改的)源?
弗雷德里克·哈米迪

使用Chrome的inspect元素。
卢卡斯2012年

3
@Luke值将更改,但HTML元素在Chrome检查器中的可见值不会更改。然后尝试提醒该值或将其输出到控制台,您将看到它已更改。看到了,它已经改变了:jsfiddle.net/a8SxF
TheZ 2012年

是的,我现在看到了。我正在使用zClip将值复制到剪贴板,但是它是在更改后复制旧值。我想我可以稍作修改来解决它。
卢卡斯2012年

Answers:


177

使用attr代替。
$('#link').attr('value', 'new value');

演示


6
这是完全正确的,通过使用setAttribute或jQuery,attr您还将影响DOM元素的值:jsfiddle.net/a8SxF/1
TheZ 2012年

4
@TheZ是因为输入的脏值标志为false。尝试与输入进行交互(用户输入后该值变脏),然后进行setAttribute
Esailija 2012年

5
但是,当您想使用来获取html时.html(),如果使用.val('new value')attr('value', 'new value')... ,则仍然会有相同的旧值,没关系::(
Legionar 2014年

6
使用.val编码了大量复杂函数,正如我先前阅读的所有内容所建议的那样,并且遇到了同样的问题。血腥的烦人!对于希望动态更新表单元素的所有jQuery新手,此答案应该是首要考虑点。如果我先读这篇,会节省我几个小时!
格兰特(Grant)

2
这就是为什么很难在JavaScript / JQuery上运行的原因,像这样的警告。这对我很有帮助。谢谢!
eaglei22'2013-4-13

13

更改value属性不会更改defaultValue。在代码(用.html()或检索innerHTML)中,value属性将包含defaultValue,而不是value属性。


1
这就解释了。键入也不会更改<input id ='a'value>,但会影响$(“#a”)。val()的结果。只是要确定一个问题:$(“#a”)。val(value)真的是正确的方法,该方法如何更改输入元素的值,以便提交正确的值?
Daniel Katz 2014年

1
对,那是正确的。更改属性不会更改正在提交的内容。
凯文B


2

这只是发生在我身上的一种可能情况。好吧,如果它对某人有帮助,那就太好了:我编写了一个复杂的应用程序,在代码的某个地方,我使用了一个函数来清除所有文本框的值,然后再显示它们。以后的某个时候,我尝试使用jquery val('value')设置文本框值,但是在此之后,我没有立即调用ClearAllInputs方法。


0

我的类似问题是由于选择器中包含特殊字符(例如句点)引起的。

解决方法是转义特殊字符:

$("#dots\\.er\\.bad").val("mmmk");

同意,非常糟糕,您不应该逃脱,应该重命名元素的ID。
webaholik '19

-1
<script src="//code.jquery.com/jquery.min.js"></script>
<script>
function changes() {
$('#link').val('new value');
}
</script>
<button onclick="changes()">a</button>
<input type='text' value='http://www.link.com' id='link'>

1
是的,虽然这不会更新实际值。它会更新屏幕上的文本框,但是当您尝试提交表单时,该值将等于最初加载页面时的值。
格兰特(Grant)

-1

对我来说,问题是更改此字段的值不起作用:

$('#cardNumber').val(maskNumber);

上面的解决方案都不适合我,因此我进一步调查发现:

根据DOM 2级事件规范:当控件失去输入焦点并且自获得焦点以来其值已被修改时,将发生更改事件。这意味着更改事件旨在通过用户交互触发更改。程序更改不会导致触发此事件。

解决方案是添加触发函数,并使其触发更改事件,如下所示:

$('#cardNumber').val(maskNumber).trigger('change');

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.