我有以下代码
jQuery('#parent').on('keypress', '.textbox', function(e) {
var btn = jQuery(this).closest('tr').find('.btn');
if (btn.length) {
btn.triggerHandler('click');
}
});
此代码是一个委托(delegate)的按键处理程序,它正在监听具有类值“.textbox”的文本框事件。 处理程序找到类为“.btn”的按钮并调用其中包含 ajax 调用的点击处理程序。
问题是这似乎阻止了事件的完成,即如果框中的值为“2”并且我输入了“3”,处理程序将执行但框中的值仍然是“2”而不是“a” “23”。
注释掉btn triggerHandler语句就正常了。
为什么会这样?
最佳答案
使用 keyup
而不是 keypress
。正如在您的脚本中一样,您触发了另一个事件。
jQuery('#parent').on('keyup', '.textbox', function(e) {
var btn = jQuery(this).closest('tr').find('.btn');
if (btn.length) {
btn.triggerHandler('click');
}
});
keypress
被 triggerHandler
中断,因此不允许按键按下的默认操作发生。而 keyup
将首先执行默认操作,然后监听处理程序。
关于javascript - 按键处理程序取消事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37044066/