2012-01-20 5 views
2

の後にフォーム入力ボックスの値を確認する関数を呼び出す必要があり、それに対応するすべてのコールバックハンドラが終了して返されました。 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)は、その相互作用がOSによって中断されているためFFで実行できないということです。つまり、altボタンを押すと聞くことができますが、それを 'u'キーと組み合わせると、ブラウザがシステムによって完全に中断されたように見えます。しかし、Chromeでは、このキーの組み合わせを取得できます。 – Davsket

答えて

3

代わりにkeyUpを使用してください。入力前にkeyDownが実行されます。その後keyUpが解雇されます。

+0

あなたが 'keyUp'のrestrictitonに追加したようです。その場合、これを行うための「クリーン」な方法はありません。イベントの起動を可能にするには、 'keyDown'ハンドラを完全に終了させるためにJavaScriptが必要です。したがって、本当に適切なイベントで聴くことができない場合、唯一のオプションは、 '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)); 
}); 

これあなたが押したキーが表示されます、これを試してみてください。

・ホープこれはあなたの問題

関連する問題