Jef*_*ter 9 javascript jquery android
我很难在javascript/jQuery中将退格键捕获为键盘事件.在Firefox,Safari,Opera,Chrome和iPhone/iPad上,我在文本输入框上捕获了一个keyup事件,如下所示:
$(id_input).keyup(function(event) {
that.GetHints($(this).val().trim(), event, fieldName);
});
Run Code Online (Sandbox Code Playgroud)
此事件捕获用户击键,然后将它们发送到函数以发出ajax查找调用.
当用户希望对他/她已输入的角色进行退格时,我的问题就来了.在除了我的Droid手机之外我可以访问的所有浏览器中,当我按退格键时,此keyup事件捕获$(this).val().trim()返回的值并将其发送到函数进程GetHints.但是,在Droid上,在用户对$(this)中的每个字符进行退格操作之前,此keyup和等效的keydown事件都不会触发.
因此,例如,如果我输入"cu"然后退回"u",在输入字段中只留下"c",在除Droid之外的所有浏览器中,keyup事件将触发并调用函数GetHints("c", event, fieldName).在Droid上,keyup事件永远不会发生.
我错过了什么?如何/为什么我的Droid上的软键盘或硬键盘上的退格键不能按预期运行?我该如何解决这个问题?
您可以轮询文本中的更改(使用setInterval)。这可能会更可靠。例如,如果用户右键单击 -> 剪切,则 keyup 不会触发。单独轮询的响应速度会较差,但您可以将其与 keyup 结合起来以保持敏捷。轮询会消耗更多的处理器资源。
尝试按照以下思路进行操作:
var oldText = '';
var timer = setInterval(function(){
var text = $(id_input).val().trim();
if(text != oldText){
oldText = text;
that.GetHints(text, fieldName);
}
}, 500);
Run Code Online (Sandbox Code Playgroud)
根据需要调整间隔持续时间。
我不确定 的that.GetHints作用是什么event,但显然,您无法使用轮询方法传递它(因为没有实际的事件被触发)。这是一个问题吗?
clearInterval(timer);如果需要,您可以用来停止轮询。
您可以保持现有的 keyup 功能不变(以提高响应速度)。或者,您可能希望只进行轮询以避免that.GetHints被调用太多(例如,如果有人快速输入某些内容)。