未在 Android 浏览器上引发 JavaScript 按键事件

IT技术 javascript android jquery keypress hybrid-mobile-app
2021-02-05 12:14:45

我创建了一个简单的代码来处理keypress事件:

var counter = 0;        
$('input').on('keypress', function () {
    $('div').text('key pressed ' + ++counter);
});

JSFiddle。

但在移动浏览器(Android 4+、WindowsPhone 7.5+)上不会引发按键事件处理程序。可能是什么问题?

6个回答

我相信keypress现在已被弃用。您可以查看Dom Level 3 Spec使用keydownkeyup应该可以工作。该规范还建议,你应该使用beforeinput代替按键,但我不知道这样的支持。

keydown 不传递字符,而是传递键码。因此,keydown 不能替代 keypress。
2021-03-16 12:14:45
keypress仍然适用于 iphone,但不适用于 Android,因为keydown不适用于 iphone 和 android
2021-03-27 12:14:45
屏幕键盘仍然不支持“按键”。
2021-04-02 12:14:45
@Meixner 这是很久以前的事了,所以我不知道 Android 是否仍然不支持 Keypress。使用此解决方案,虽然想法是您从键码中找到字符
2021-04-08 12:14:45
注意:beforeinput应该可以取消,但它不是在 Chrome 上。stackoverflow.com/questions/53140803/...
2021-04-08 12:14:45

使用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);
});
如果您想对更改做出反应,您甚至可以更愿意使用 oninput。但是,如果您所追求的是实际输入的密钥,那么这些都不会在 Android 上帮助您。
2021-03-24 12:14:45
@ÍhorMé 你有安卓键盘事件的解决方案吗?
2021-03-24 12:14:45
@Mrunal 普遍地,您应该使用 oninput 事件。我已经在此处发布了用于在所有(或至少许多)平台上处理输入文本的代码stackoverflow.com/questions/30743490/...如果这就是您所追求的。不过,它的格式是 4 间距制表符,而 Stack 有完全疯狂的 8 间距制表符,但请注意。
2021-03-30 12:14:45
$(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);
    }
  })
})
请尝试为您的解决方案添加更多信息。欢迎来到 Stack Overflow。:)
2021-03-25 12:14:45

是的,一些android浏览器不支持keypress事件,我们只需要使用keydown或keyup就会得到不同的keycode,为了避免不同的keycode,使用下面的函数通过发送char值来获取keycode。

例如:

function getKeyCode(str) {
  return str && str.charCodeAt(0);    
}
function keyUp(){
 var keyCode = getKeyCode("1"); 
}

使用 jQuery 的 input 事件,像这样:

$( 'input' ).on( 'input', function() {
    ...
} );

有了这个,你不能使用 e.which 来确定按下了哪个键,但我在这里找到了一个很好的解决方法:http : //jsfiddle.net/zminic/8Lmay/