本文介绍如何在JavaScript和jQuery中实时监听输入框值的变化。通过对比change、keydown等事件的局限性,重点讲解原生JS的oninput与onpropertychange事件,以及jQuery中bind方法的使用。包含兼容IE9以下版本的代码示例,适用于下拉框自动匹配等场景。
实时监听输入框值的背景与需求
本文通过具体示例,详细解析了利用JavaScript和jQuery实现输入框值实时监听的oninput与onpropertychange方法,供读者参考借鉴。
在近期的一个项目开发中,遇到一个需求:需要在下拉框中根据输入内容自动匹配关键字。实现这一功能的核心在于实时监听文本框value值的变化,以便动态获取并匹配相关内容。
接手项目初期,首先考虑使用jQuery中的change事件,但随即排除该方案,因为change事件仅在文本框失去焦点时才会触发,无法满足实时性要求。随后尝试使用keydown事件作为替代方案。虽然该方案在其他操作上表现正常,但当用户通过鼠标进行复制粘贴操作时,keydown事件无法被触发,因此该方案也被否决。
oninput与onpropertychange事件原理
经过查阅相关资料,发现只有原生JavaScript的oninput和onpropertychange事件能够完全满足实时监听的需求。接着查阅jQuery的API文档,虽然未直接找到对应的高级封装方法,但发现可以通过bind方法绑定input和propertychange事件。经实际测试,这种绑定方式运行正常,效果符合预期。
以下是具体的实现示例代码。
jQuery实现方式:
jQuery绑定实现示例
$('input').bind('input propertychange', function() {
//进行相关操作
});
上述代码中,propertychange事件主要用于兼容IE9以下的浏览器版本。
在原生JavaScript中,oninput事件在IE9及以下版本中不支持,因此需要使用IE特有的onpropertychange事件进行替代。该事件在用户界面发生修改或通过脚本直接修改内容时均会触发,具体涵盖以下几种情况:
当修改input:checkbox或input:radio元素的选择状态时,checked属性发生变化会触发该事件。
当修改input:text或textarea元素的值时,value属性发生变化会触发该事件。此外,修改select元素的选中项时,selectedIndex属性发生变化也会触发。
原生JS兼容IE的实现方案
if(isIE)
{
document.getElementById("input").onpropertychange = keys();
}
else //需要用addEventListener来注册事件
{
document.getElementById("input").addEventListener("input", keys, false);
}
希望本文提供的JavaScript程序设计思路与代码示例,能对各位开发者有所帮助。