iOS 9 - keyup 事件未触发
iOS 9 - keyup event not firing
是否有人对 iOS 9 中的 keyup
事件没有触发有问题?
只需一个简单的测试台就可以为我复制这个问题。
<input id="txtInput" />
原版 JS:
document.getElementById('txtInput').onkeyup = function () {
console.log('keyup triggered');
}
jQuery:
$('#txtInput').on('keyup', function () {
console.log('keyup triggered');
});
都不火...
它不是很漂亮,但解决方法是绑定到 keydown
以捕获按下的键,如果您想获取值,则 input
包括键入的键:
(function () {
var keyCode;
$('#txtInput')
.on('keydown', function (e) {
// value not updated yet
keyCode = e.keyCode;
// Enter key does not trigger 'input' events; manually trigger it
if (e.keyCode === 13) $(this).trigger('input');
})
.on('input', function (e) {
console.log(keyCode, this.value);
});
}());
如果您键入 'a',将出现以下情况:
keydown
触发。
e.keyCode
设置为按下的键的 ASCII 值。
this.value
是 ''
(即在输入 'a' 之前相同)。
input
触发。
e.keyCode
是 undefined
。
this.value
是 'a'
.
您也可以在按下回车 (13) 键时手动触发 input
事件; input
默认情况下不会被该键触发。
我建议在带有触摸屏的浏览器上使用 keypress
事件。不过,我知道 you can't really detect touch screen screens,因此它为您提供了一些您的情况可能会决定的选项。
- 附加事件
keyup
和 keypress
。这可能取决于正在进行的处理量以及您是否在某些浏览器中出现双重触发。
- 尝试判断浏览器是否为触摸屏(如使用Modernizr),然后附加回退处理程序如
change
.
无论哪种方式,您最终都会得到两个事件侦听器。
$('#yourid').bind('keypress', function(e) {
// This will work
});
是否有人对 iOS 9 中的 keyup
事件没有触发有问题?
只需一个简单的测试台就可以为我复制这个问题。
<input id="txtInput" />
原版 JS:
document.getElementById('txtInput').onkeyup = function () {
console.log('keyup triggered');
}
jQuery:
$('#txtInput').on('keyup', function () {
console.log('keyup triggered');
});
都不火...
它不是很漂亮,但解决方法是绑定到 keydown
以捕获按下的键,如果您想获取值,则 input
包括键入的键:
(function () {
var keyCode;
$('#txtInput')
.on('keydown', function (e) {
// value not updated yet
keyCode = e.keyCode;
// Enter key does not trigger 'input' events; manually trigger it
if (e.keyCode === 13) $(this).trigger('input');
})
.on('input', function (e) {
console.log(keyCode, this.value);
});
}());
如果您键入 'a',将出现以下情况:
keydown
触发。e.keyCode
设置为按下的键的 ASCII 值。this.value
是''
(即在输入 'a' 之前相同)。input
触发。e.keyCode
是undefined
。this.value
是'a'
.
您也可以在按下回车 (13) 键时手动触发 input
事件; input
默认情况下不会被该键触发。
我建议在带有触摸屏的浏览器上使用 keypress
事件。不过,我知道 you can't really detect touch screen screens,因此它为您提供了一些您的情况可能会决定的选项。
- 附加事件
keyup
和keypress
。这可能取决于正在进行的处理量以及您是否在某些浏览器中出现双重触发。 - 尝试判断浏览器是否为触摸屏(如使用Modernizr),然后附加回退处理程序如
change
.
无论哪种方式,您最终都会得到两个事件侦听器。
$('#yourid').bind('keypress', function(e) {
// This will work
});