Android 浏览器上未引发 JavaScript 按键事件
Posted
技术标签:
【中文标题】Android 浏览器上未引发 JavaScript 按键事件【英文标题】:JavaScript keypress event not raised on Android browser 【发布时间】:2014-01-30 01:44:45 【问题描述】:我创建了一个简单的代码来处理keypress
事件:
var counter = 0;
$('input').on('keypress', function ()
$('div').text('key pressed ' + ++counter);
);
JSFiddle.
但在移动浏览器(android 4+、WindowsPhone 7.5+)上不会引发 keypress 事件处理程序。 可能是什么问题?
【问题讨论】:
在这里尝试@The System Restart 的建议:***.com/questions/10580295/… 【参考方案1】:我相信 keypress 现在已被弃用。您可以查看Dom Level 3 Spec。使用 keydown 或 keyup 应该可以。该规范还建议您应该使用 beforeinput 而不是 keypress 但我不确定这是什么支持。
【讨论】:
keydown 不提供字符而是提供键码。因此,keydown 不能替代 keypress。 @Meixner 这是很久以前的事了,所以我不知道 Android 是否仍然不支持 Keypress。有了这个解决方案,虽然想法是你从键码中找到字符 "keypress" 仍然不支持屏幕键盘。keypress
仍然适用于 iphone 但不适用于 Android,而 keydown
不适用于 iphone 和 android
注意:beforeinput
应该可以取消,但它不在 Chrome 上。 ***.com/questions/53140803/…【参考方案2】:
使用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 上为您提供帮助。 @ÍhorMé 你有解决安卓键盘事件的办法吗? @Mrunal 普遍来说,你应该使用 oninput 事件。我已经在***.com/questions/30743490/… 发布了用于在所有(或至少许多)平台上处理输入文本的代码,如果这就是您所追求的。不过,它是用 4 间隔的制表符格式化的,而 Stack 有完全疯狂的 8 间隔制表符,但请注意。【参考方案3】:使用jQuery的输入事件,像这样:
$( 'input' ).on( 'input', function()
...
);
这样你就不能使用 e.which 来确定按下了哪个键,但我在这里找到了一个很好的解决方法:http://jsfiddle.net/zminic/8Lmay/
【讨论】:
【参考方案4】:$(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。 :)【参考方案5】:是的,有些android浏览器不支持keypress事件,我们只需要使用keydown或keyup但会得到不同的keycode,为了避免不同的keycode使用下面的函数通过发送char值来获取keycode。
例如:
function getKeyCode(str)
return str && str.charCodeAt(0);
function keyUp()
var keyCode = getKeyCode("1");
【讨论】:
【参考方案6】:我认为使用其他事件代替“按键”是个坏主意。 您需要做的只是在您的项目中包含一个 jQuery 文件。 一个名为 jQuery.mobile.js 或任何版本的非常相似的文件(例如 jQuery.ui.js)可以帮助你。
你可以从https://jquerymobile.com/download/下载它
【讨论】:
以上是关于Android 浏览器上未引发 JavaScript 按键事件的主要内容,如果未能解决你的问题,请参考以下文章