47

我的页面上有以下 jQuery 代码:

var isChanged = false;
$(document).ready(function()
{
    $('.change').change(function() {
        isChanged = true;
    });
});

我正在使用一个插件来修改它链接到的文本框的值:

target.val('xxxx');

html 中的文本框(来自 asp.net)是:

<input name="ctl00$cphHolder1$rptFlex$ctl01$txtLeftRank"
  type="text"
  value="52°"
  id="ctl00_cphHolder1_rptFlex_ctl01_txtLeftRank"
  class="change atiselector" />

当使用代码更改文本框的值时,不会触发更改。如果我在文本框中输入,更改就会触发。我错过了什么?

4

4 回答 4

78

这就是它的工作方式。如果您需要更改值来触发“更改”事件,您可以通过以下方式显式执行此操作:

$('input#whatever').val('hi').change();
于 2010-02-11T20:15:23.303 回答
4

$('.change').change()将触发该事件。仅更改属性不会触发事件。

于 2010-02-11T20:15:16.717 回答
4

根据DOM Level 2 事件规范

当控件失去输入焦点并且其值在获得焦点后已被修改时,会发生更改事件。

这意味着更改事件旨在通过用户交互触发更改。程序化更改不会导致触发此事件。

于 2014-12-16T08:49:00.270 回答
0

如上所述,更改事件旨在通过用户交互触发。如果您想在以编程方式设置值后做某事,您可以使用 jQuery valHooks

var isChanged = false;
$.valHooks['text'] = {
    set: function (elem, value) {
        if ($(elem).is('.change')) {
            elem.value = value;
            isChanged = true;
            return true;
        }
    }
};
于 2021-08-15T01:35:19.007 回答