如何用jQuery/JavaScript触发keypress事件?自动触发输入框按键事件
我来帮你搞定这个问题~你的核心需求是用jQuery填充输入框值后,自动触发Enter键的keypress事件,不用手动按回车对吧?先说说你现有代码里的问题,再给你可行的解决方案:
你的代码问题在哪?
- jQuery对象不能直接用
addEventListener:$('#message')返回的是jQuery包装后的对象,原生JS的addEventListener方法不能直接用在它身上,要绑定事件得用jQuery的.on()方法。不过其实你根本不需要绑定新的事件处理函数——你要的是触发已经通过onkeypress="return newEvent(event)"绑定好的newEvent函数,而不是新增一个。 - 没有模拟Enter键的事件参数:就算你绑定了新事件,也只是注册了一个回调,没有主动触发;而且原来的
newEvent函数应该是判断了按键是否为Enter(keyCode=13)才执行逻辑,你没传入这个关键的事件参数,自然不会触发预期的行为。
两种可行的解决方案
方法一:直接调用绑定的newEvent函数(最简单直接)
既然输入框已经绑定了newEvent作为keypress的处理函数,那我们填充值后,直接手动调用这个函数,传入一个模拟的Enter键事件对象就行:
var value = "my text"; $('#message').val(value); // 模拟一个Enter键的keypress事件对象 var enterEvent = jQuery.Event('keypress'); enterEvent.keyCode = 13; // Enter键的键码是13 enterEvent.which = 13; // 兼容部分用which判断的浏览器 // 直接调用原来的newEvent函数 newEvent(enterEvent);
方法二:用jQuery的trigger()触发完整的keypress事件
如果你想更完整地模拟用户按下回车的过程,可以用jQuery的trigger()方法,直接触发输入框的keypress事件,并带上Enter键的参数:
var value = "my text"; $('#message').val(value); // 创建并触发带有Enter键标识的keypress事件 $('#message').trigger(jQuery.Event('keypress', { keyCode: 13, which: 13 }));
补充说明
有些旧浏览器会用which而不是keyCode来判断按键,所以同时设置这两个属性可以提升兼容性。另外,如果你不确定原来的newEvent函数是用哪个属性判断的,两种都写上准没错。
这样修改后,输入框填充值后就会自动触发Enter键的keypress逻辑,完全不用手动按回车啦~
内容的提问来源于stack exchange,提问作者AppleBud
相关产品推荐
相关产品推荐

