我有一个 HTML 输入,其值中包含一个链接。
<input type = 'text' value = 'http://www.link.com' id = 'link' />
我使用 jQuery 来更改某个事件的值。
$('#link').val('new value');
以上代码更改文本框的值,但不更改代码中的值(value = “ http://www.link.com”保持不变)。我也需要修改 value =”。
更改 value 属性不会更改 defaultValue。在代码中(用 .html()或 innerHTML检索) value 属性将包含 defaultValue,而不是 value 属性。
defaultValue
.html()
innerHTML
使用 attr代替。 $('#link').attr('value', 'new 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 节点对象.
input
value
$(input).attr("value", "42")
$(input).val("42")
$(input).prop("value", "42")
参见: What is the difference between properties and attributes in HTML?