Javascript事件:获取<input>控件值更改的通知

Dan*_*ola 8 html javascript events

我有以下问题:

我有一个HTML文本框(<input type="text">),其内容由我无法触摸的脚本修改(这是我的页面,但我正在使用外部组件).

我希望每次文本框的值发生变化时都会在我的脚本中收到通知,所以我可以对它做出反应.

我试过这个:

txtStartDate.observe('change', function() { alert('change' +  txtStartDate.value) });
Run Code Online (Sandbox Code Playgroud)

哪(可预见)不起作用.它只会在我自己用键盘更改文本框值然后将焦点移动到其他位置时执行,但如果脚本更改了值,则不会执行它.

还有我可以听的另一个事件,我不知道吗?



我正在使用Prototype库,如果它是相关的,修改文本框值的外部组件是Basic Date Picker(www.basicdatepicker.com)

noa*_*oah 5

正如您所暗示的那样,更改(和其他事件)仅在用户执行某些操作时触发.修改内容的脚本不会触发任何事件.你唯一的解决方案就是找到一些可以连接到你的监听器的控件.

我将如何做到这一点:

basicDatePicker.selectDate = basicDatePicker.selectDate.wrap(function(orig,year,month,day,hide) {
  myListener(year,month,day);
  return orig(year,month,day,hide);
});
Run Code Online (Sandbox Code Playgroud)

这是基于Firebug的粗略外观(我不熟悉该组件).如果还有其他方法可以选择日期,那么您还需要包装这些方法.


Sha*_*531 5

addEventListener(" DOMControlValueChanged " 将在控件的值更改时触发,即使是通过脚本更改也是如此。

addEventListener(" input " 是 DOMControlValueChanged 的​​直接用户启动的过滤版本。

不幸的是,目前只有 Opera 支持 DOMControlValueChanged,而 webkit 中的输入事件支持已被破坏。输入事件在 Firefox 和 Opera 中也存在各种错误。

fwiw,这些东西可能很快就会在 HTML5 中被清除。

更新:

截至 2012 年 9 月 8 日,Opera 已删除 DOMControlValueChanged 支持(因为它已从 HTML5 中删除),并且现在浏览器中的“输入”事件支持要好得多(包括更少的错误)。