jQuery .val change doesn't change input value

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

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

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

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

以上代码更改文本框的值,但不更改代码中的值(value = “ http://www.link.com”保持不变)。我也需要修改 value =”。

158574 次浏览

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

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

小样

<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'>

这只是发生在我身上的一个可能的情况。好吧,如果它帮助某人那么伟大: 我写了一个复杂的应用程序,沿着代码的某处,我使用一个函数来清除所有文本框的值,然后再显示它们。后来,我尝试使用 jquery val (‘ value’)来设置文本框的值,但是在调用 ClearAllInput 方法之后,我没有注意到这一点。.所以,这也可能发生。

扩展一下李嘉图的答案: https://stackoverflow.com/a/11873775/7672426

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

关于 val ()

使用此方法设置值(或使用本机值属性)不会导致更改事件的分派。因此,不会执行相关的事件处理程序。如果要执行它们,应该调用。设置值后触发器(“ change”)。

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

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

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

对我来说,问题在于改变这个字段的值不起作用:

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

以上的解决方案对我都不管用,所以我进一步调查后发现:

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

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

$('#cardNumber').val(maskNumber).trigger('change');
$('#link').prop('value', 'new value');

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

Note that the browser parses the HTML 标记元素 and creates a corresponding DOM 节点对象.

  • 输入的“初始/起始/默认值” :
    • 平等:
      • inputHTML 标记元素value 属性的初始值仅
      • inputDOM 节点对象财产
    • 通过以下方式在 jQuery 中设置:
      • $(input).attr("value", "42")
  • 输入“当前值” :
    • 平等:
      • value 属性 of input's HTML 标记元素
      • value 财产 of input's DOM 节点对象.
    • 通过以下方式在 jQuery 中设置:
      • $(input).val("42")
      • $(input).prop("value", "42")

参见: What is the difference between properties and attributes in HTML?