如何捕获触摸设备的屏幕键盘’keydown’和’keyup’事件

我已经定义了键盘事件,它在桌面上运行良好,但触摸设备没有获得屏幕键盘事件。 如果用户正在打字,我需要捕获。 我使用了以下代码段:

$('#id').keydown(function(e){ //some code here }); $('#id').keyup(function(e){ //some code here }) 

我希望keydownkeyup定义的代码甚至可以触发触摸设备(平板电脑和手机)。 请建议如何捕获屏幕键盘事件并使上述代码运行。

您是否尝试使用按键而不是按键

 $("#id").keypress(function() { }); 

更新 :

由于安卓问题,我现在通常会像这样包裹我的支票

 if ($.browser.mozilla) { $("#id").keypress (keyPress); } else { $("#id").keydown (keyPress); } function keyPress(e){ doSomething; } 

解决此问题的一种方法是在未检测到keyupkeydown事件时使用setInterval

 var keyUpFired = false; $('#input').on('keyup',function() { keyUpFired = true; // do something }); if( keyUpFired === false) { setInterval(function() { if($('#input').val().length>0) { // do something } },100); } 

以下是使用Materialize进行触摸设备测试的小示例。

 $(document).ready(function() { var keyUpFired = false; $('#input').on('keyup',function() { keyUpFired = true; if ($('#input').get(0).checkValidity() === true) { $('label[for="input"]').attr('data-success','Custom Success Message: You typed...'+$(this).val()); } else { $('label[for="input"]').attr('data-error','Custom Error Message: Username too small'); } validate_field($('#input')); }); if( keyUpFired == false) { setInterval(function() { if($('#input').val().length>0) { if ($('#input').get(0).checkValidity() !== false) { $('label[for="input"]').attr('data-success','Custom Success Message: You typed...'+$('#input').val()); } else { $('label[for="input"]').attr('data-error','Custom Error Message: Username too small'); } validate_field($('#input')); } },100); } }); 
    

这个页面的最后一个答案是: 我怎样才能获得jquery .val()AFTER按键事件? –

基本上丢弃“keyup”并更改为“input”,例如:$(document).delegate(’#q’,’input’,function(e){etc}