中文输入法导致html input的onkeyup事件无法被触发,解决方法

时间:2022-08-23 08:58:08

案例:验证码的input框绑定了一个keyup事件,但是偶尔有客户投诉说登录的时候老是提示验证码无法通过验证。

原因:一开始以为是客户的浏览器没有启用cookie。后来了解到客户使用各种浏览器都有同样的问题,才发现是客户使用了五笔输入法输入验证码,导致keyup事件无法被触发。本地测试可以重现:用搜狗输入法输入英文字母然后回车确定输入。

解决:弃用监听keyup事件,改为监听另外两个事件:input(非IE)和propertychange(IE)


代码如下:

		//$("#captcha").on("keyup", checkCaptchaInput);
		//"keyup"如果使用输入法会失效,改用input(非IE)和propertychange(IE)
		var bind_name = 'input';
		if (navigator.userAgent.indexOf("MSIE") != -1) {
			bind_name = 'propertychange';
		}
		$('#captcha').bind(bind_name, checkCaptchaInput);