捕获backspace的关键事件

我很难捕获退格键作为JavaScript / jQuery中的键盘事件。 在Firefox,Safari,Opera,Chrome和iPhone / iPad上,我在文本input框中捕获一个按键事件,如下所示:

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

这个事件捕获用户击键,然后发送给一个函数发出一个Ajax查找调用。

当用户希望退回他/她已经input的字符时,我的问题就出现了。 在除了我的Droid手机以外的所有浏览器中,当我按下退格键时,这个键入事件捕获由$(this).val()。trim()返回的值,并将其发送到函数处理GetHints。 然而,在Droid上,这个keyup和相等的keydown事件都不会触发,直到用户退出$(this)中的每个字符为止。

所以,例如,如果我input“cu”然后回退到“u”,在input字段中只剩下“c”,除了Droid之外的所有浏览器中,keyup事件都会触发并调用函数GetHints("c", event, fieldName) 。 在Droid上,关键事件永远不会发生。

我错过了什么? 在Droid的软键盘或硬键盘上,这个退格键是如何/为什么没有像预期的那样工作? 我如何解决这个问题?

Solutions Collecting From Web of "捕获backspace的关键事件"

您可以轮询文本中的更改(使用setInterval )。 这可能会更可靠。 例如,如果用户右键单击 – >剪切,则不会触发registry键。 仅靠民意测验的响应就会less一些,但是您可以将其与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); 停止投票,如果你想。

你可以保持现有的密码function(增加响应能力)。 或者,你可能希望只是轮询,以避免这that.GetHints被调用太多(例如,如果有人真的很快input的东西)。