2012-01-20 46 views
2

我需要调用一个函数来检查之后的表单输入框的keyDown事件及其所有对应的回调处理程序是否已完成并返回。我知道我需要这个,因为如果我在回调处理程序中放置一个计时器,该处理程序在200毫秒左右后检查输入框的值,该值与预期的一样,但如果我在回调处理程序本身的末尾检查该值,空。javascript/jQuery调用函数_after_事件已完成并返回

// case 1 
$('textbox').keyDown(function(){ 
    ... 
    console.log($(this).val()); // empty, not as expected 
}); 

// case 2 
$('textbox').keyDown(function(){ 
    ... 
    var $textbox = $(this); 
    var timer = setTimeout(function(){ 
    console.log($textbox.val()); // works as expected 
    clearTimeout(timer); 
    }, 200); 
}); 

那么,有没有在JavaScript/jQuery的一个清洁的方式来调用函数事件发生后已经完全结束? (是的,我意识到onChange事件,但我已经尝试过,它不适用于这种情况。我试图检测用户定义的组合键,这是一个角落案例。在这种情况下,keyPress和keyUp事件也不会触发,只是keyDown。)

+0

为什么不显示您尝试过的代码? – AmGates

+0

@AmGates:完成。 – Suan

+0

我所看到的是你正试图解决的问题(是的Alt + U escenario)在FF中不可行,因为这种交互被OS中断。我的意思是,按alt按钮可以听,但是当它与'u'键结合时,看起来浏览器完全被系统中断。但在Chrome中,你可以得到这个组合。 – Davsket

回答

3

改为使用keyUp。在输入前触发keyDown; keyUp被解雇后。

+0

看起来像你在'keyUp'的限制中添加的。如果是这样,那么就没有“干净”的方式来做到这一点。为了让事件完成触发,您需要JavaScript来彻底终止'keyDown'处理程序。因此,如果你真的不能听适当的事件,你唯一的选择是'setTimeout'。 – cheeken

+0

我编辑了我的问题,以显示keyPress和keyUp在此特定场景中不会触发。当某人在Firefox中的Mac上输入“Alt + U”时会引起一些特殊的重音字符 – Suan

+0

您试过将'keyUp'或'keyPress'绑定到'window'吗? – cheeken

0

你好朋友试试这个,你会得到它

$('textbox').keyDown(function(e){ 
    ... 
    console.log(String.fromCharCode(e.which)); 
}); 

这表明你已经按下的键。

希望能够解决您的问题