我已经创建了一个简单的代码来处理keypress
事件:
var counter = 0;
$('input').on('keypress', function () {
$('div').text('key pressed ' + ++counter);
});
但是在移动浏览器(Android 4+,WindowsPhone 7.5+)上,keypress事件处理程序不会被触发。 可能是什么问题呢?
我已经创建了一个简单的代码来处理keypress
事件:
var counter = 0;
$('input').on('keypress', function () {
$('div').text('key pressed ' + ++counter);
});
但是在移动浏览器(Android 4+,WindowsPhone 7.5+)上,keypress事件处理程序不会被触发。 可能是什么问题呢?
我相信现在已经废弃了keypress
。你可以在Dom Level 3规范中查看。使用keydown
或keyup
应该可以正常工作。该规范还建议您使用beforeinput
而不是keypress
,但我不确定这项功能的支持情况。
keypress
在 iPhone 上仍然可用,但在 Android 上无法使用,而 keydown
对于 iPhone 和 Android 都不起作用。 - OM The Eternitybeforeinput
事件应该是可取消的,但在Chrome上却不行。https://stackoverflow.com/questions/53140803/why-is-contenteditable-beforeinput-event-not-cancelable - user3187724使用 keyup
事件:
// JavaScript:
var counter = 0;
document.querySelector('input').addEventListener('keyup', function () {
document.querySelector('div').textContent = `key up ${++counter}`;
});
// jQuery:
var counter = 0;
$('input').on('keyup', function () {
$('div').text('key up ' + ++counter);
});
使用jQuery的输入事件,如下所示:
$( 'input' ).on( 'input', function() {
...
} );
使用这种方法无法使用 e.which 来确定按下了哪个键,但我在这里找到了一个不错的解决方法:http://jsfiddle.net/zminic/8Lmay/
$(document).ready(function() {
var pattForZip = /[0-9]/;
$('#id').on('keypress input', function(event) {
if(event.type == "keypress") {
if(pattForZip.test(event.key)) {
return true;
}
return false;
}
if(event.type == 'input') {
var bufferValue = $(this).val().replace(/\D/g,'');
$(this).val(bufferValue);
}
})
})
是的,一些安卓浏览器不支持keypress事件,我们需要使用只有keydown或keyup但会得到不同的键码,为了避免不同的键码,请使用以下函数通过发送字符值来获取键码。
例如:
function getKeyCode(str) {
return str && str.charCodeAt(0);
}
function keyUp(){
var keyCode = getKeyCode("1");
}
我认为用其他事件代替“keypress”是个不好的主意。 你需要做的就是将一个jQuery文件包含到你的项目中。 任何版本的名为jQuery.mobile.js或类似的文件(例如jQuery.ui.js)都可以帮助你。
你可以从这里下载它:https://jquerymobile.com/download/