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

IT技术 javascript jquery
2021-02-26 01:13:21

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

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

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

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

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

6个回答

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

演示

这就是为什么用 JavaScript/JQuery 开始运行如此困难,有这么多这样的警告。这对我帮助很大。谢谢!
2021-04-27 01:13:21
但是当你想用 获取 html 时.html(),仍然会有相同的旧值,没关系,如果你使用.val('new value')or attr('value', 'new value')... :(
2021-05-02 01:13:21
使用 .val 编写了大量复杂的函数(正如我之前阅读的所有内容所建议的),并且遇到了完全相同的问题。烦死人了!对于任何希望动态更新表单元素的 jQuery 新手来说,这个答案应该是第一点。如果我先阅读本文,我会节省几个小时的时间!
2021-05-05 01:13:21
这是完全正确的,通过使用setAttribute或 jQuery 的attr你也会影响 DOM 元素的值:jsfiddle.net/a8SxF/1
2021-05-08 01:13:21
@TheZ 那是因为输入的脏值标志为假。尝试与输入交互(用户输入后该值是脏的)然后 setAttribute
2021-05-09 01:13:21

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

这就解释了。输入也不会改变 <input id='a' value> 但会影响 $("#a").val() 的结果。一个问题只是为了确定: $("#a").val(value) 真的是如何更改输入元素的值的正确方法,以便提交正确的值吗?
2021-04-17 01:13:21
对,那是正确的。更改属性不会更改提交的内容。
2021-04-17 01:13:21

扩展一下里卡多的回答:https : //stackoverflow.com/a/11873775/7672426

http://api.jquery.com/val/#val2

关于 val()

使用此方法(或使用本机 value 属性)设置值不会导致更改事件的调度。因此,不会执行相关的事件处理程序。如果你想执行它们,你应该在设置值后调用 .trigger( "change" ) 。

$('#link').prop('value', 'new value');

说明:Attr 将在 jQuery 1.6 上运行,但从 jQuery 1.6.1 开始,情况发生了变化。在大多数情况下, prop() 做 attr() 过去做的事情。在您的代码中用 prop() 替换对 attr() 的调用通常会起作用。Attr 会给你元素的值,因为它是在页面加载的 html 中定义的,prop 会给出通过 jQuery 修改的元素的更新值。

也试着解释你的答案
2021-04-17 01:13:21

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