繁体   English   中英

捕获退格键事件

[英]Capturing key event for backspace

我很难在javascript / jQuery中将退格键捕获为键盘事件。 在Firefox,Safari,Opera,Chrome和iPhone / iPad上,我在文本输入框上捕获了一个keyup事件,如下所示:

$(id_input).keyup(function(event) {
   that.GetHints($(this).val().trim(), event, fieldName);
});

此事件捕获用户击键,然后将它们发送到函数以发出ajax查找调用。

当用户希望对他/她已输入的角色进行退格时,我的问题就来了。 在除了我的Droid手机之外我可以访问的所有浏览器中,当我按退格键时,此keyup事件捕获$(this).val()。trim()返回的值并将其发送到函数进程GetHints。 但是,在Droid上,在用户对$(this)中的每个字符进行退格操作之前,此keyup和等效的keydown事件都不会触发。

因此,例如,如果我输入“cu”然后退回“u”,在输入字段中仅留下“c”,在除Droid之外的所有浏览器中,keyup事件将触发并调用函数GetHints("c", event, fieldName) 在Droid上,keyup事件永远不会发生。

我错过了什么? 如何/为什么我的Droid上的软键盘或硬键盘上的退格键不能按预期运行? 我该如何解决这个问题?

您可以轮询文本中的更改(使用setInterval )。 这可能更可靠。 例如,如果用户右键单击 - > cut,则不会触发keyup。 单独轮询会降低响应速度,但你可以将它与keyup相结合,以保持它的活泼。 轮询会使处理器更重。

尝试这些方面的东西:

var oldText = '';
var timer = setInterval(function(){
    var text = $(id_input).val().trim();
    if(text != oldText){
        oldText = text;
        that.GetHints(text, fieldName);
    }
}, 500);

根据需要调整间隔持续时间。

我不确定那是什么that.GetHintsevent做了什么,但很明显,你不能在使用轮询方法时传递它(因为没有实际事件被触发)。 这是一个问题吗?

你可以使用clearInterval(timer); 如果你愿意,停止投票。

您可以保持现有的键盘功能(以提高响应速度)。 或者,您可能希望只是进行轮询以避免that.GetHints被调用得太多(例如,如果某人真的很快就that.GetHints )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM