问题
Is anybody else having problems with the keyup event in iOS 9 not firing?
Just a simple test bed replicates the issue for me.
<input id="txtInput" />
Vanilla JS:
document.getElementById('txtInput').onkeyup = function () {
console.log('keyup triggered');
}
jQuery:
$('#txtInput').on('keyup', function () {
console.log('keyup triggered');
});
Neither fire...
回答1:
I suggest using the keypress event on browsers with touch screens. I know that you can't really detect touch screen screens, though, so it leaves you with a few options that your situation will likely dictate.
- Attach both events
keyupandkeypress. This would likely be dependent on how much processing is going on and if you are getting double-fires in some browsers. - Attempt to determine whether the browser is a touch screen (like using Modernizr), and then attach a fallback handler like
change.
Either way, you end up with two event listeners.
回答2:
$('#yourid').bind('keypress', function(e) {
// This will work
});
回答3:
It's not pretty, but a work around is to bind to keydown to capture which key has been pressed, and input if you want to obtain the value, including the key typed:
(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);
});
}());
If you type 'a' the following occurs:
keydownfires.e.keyCodeis set to the ASCII value of the key pressed.this.valueis''(i.e. the same before 'a' has been typed).inputfires.e.keyCodeisundefined.this.valueis'a'.
You can also manually trigger an input event if the enter (13) key is pressed; input isn't fired by this key by default.
来源:https://stackoverflow.com/questions/33152960/ios-9-keyup-event-not-firing