检查击键只是部分解决方案,因为可以使用鼠标点击更改输入字段的内容。如果右键单击文本字段,则可以剪切和粘贴选项,以便在不进行击键的情况下更改值。同样,如果启用了自动填充,则可以左键单击一个字段并获取以前输入的文本的下拉列表,您可以使用鼠标单击从您的选项中进行选择。按键捕获不会检测到这些类型的更改。
可悲的是,至少据我所知,没有“onchange”事件立即报告更改。但是有一个适用于所有情况的解决方案:使用setInterval()设置计时事件。
假设您的输入字段的ID和名称为“city”:
有一个名为“city”的全局变量:
var city = "";
将此添加到您的页面初始化:
setInterval(lookForCityChange, 100);
然后定义一个lookForCityChange()函数:
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city); // do whatever you need to do
}
}
在此示例中,每100毫秒检查一次“城市”的值,您可以根据需要进行调整。如果您愿意,可以使用匿名函数而不是定义lookForCityChange()。请注意,您的代码甚至浏览器可能会为输入字段提供初始值,以便在用户执行任何操作之前通知您“更改”;根据需要调整代码。
如果定时事件每隔十分之一响一次的想法似乎很笨拙,你可以在输入字段收到焦点时启动定时器并在模糊时终止它(使用clearInterval())。我不认为在没有接收焦点的情况下改变输入字段的值是可能的,因此以这种方式打开和关闭定时器应该是安全的。