2

そのイベントのデフォルトの JavaScript 処理が発生した後に実行したいイベント ハンドラーがあります。

これは可能ですか?

EDIT:例:キープレスイベントが発生するたびに、そのキープレスに関するイベント情報をログに記録しています(console.logに似ています)。ここで、バックスペースを押してイベント ハンドラーを介してフィールドの内容を表示すると、イベント ハンドラーが最後の文字を実際に削除する前にフィールドの内容を取得するため、テキスト フィールドの値はバックスペースなしで値を生成します。

この場合、デフォルトのバックスペース イベントが発生し、完了時にイベント ハンドラが起動されるようにしたいと考えています。

ありがとう!

4

3 に答える 3

4

あなたの問題は、キーアップイベントではなくキープレスイベントをリッスンすることが原因だと思います。基本的にこれは、文字が dom に配置される前に textarea の値を取得していることを意味します。

keypress ハンドラーを keyup ハンドラーに変更してみてください。

例は次のとおりです。

$('input, textarea').keyup(function(ev) {

    console.log( $(this).val() );

});

編集:正確な問題と思われるこの質問が見つかりました。

于 2013-01-06T22:55:38.807 に答える
1

質問で名前が付けられているものとは別の問題があったことがわかりました。その点で、+1サム:)。

ただし、分派だけでなく、ここで質問に対処したいと思います。特定のキー押下イベントを処理する方法、またはデフォルトのキー押下イベントを処理する方法があります。

keypress泡。したがって、グローバルなものを使用してから、ローカルで必要な場所で使用e.stopPropagation()して、泡立ちを止めます。これが機能するデモです:http://jsfiddle.net/2EwR/

ここにhtmlがあります:

<div id="d1">_</div>
<br><hr>
<div id="d2"><input id="i1" type="text" /></div>

js:

var d1 = document.getElementById("d1");
window.onkeypress = function(ev){
 d1.innerHTML = "keyCode: " + ev.keyCode;
};
var d2 = document.getElementById("d2");
var i1 = document.getElementById("i1");
d2.onkeypress = function(ev){
  d1.innerHTML = "blocked";
  ev.stopPropagation();
};
于 2013-01-06T23:05:19.657 に答える
0

これは、イベントがブラウザにバブリングされた後にカスタム コードを実行する方法です。つまり、入力された値が最初にテキスト フィールドに追加され、次にカスタム関数が実行されます。必要に応じて、これをはるかに短い時間にすることもできます。

$("input").on("keypress", function () {
  setTimeout(function () {
    alert("new value should have been already added to text field. Now we are executing some custom stuff");
  }, 1000);
  return true;
});

動作デモ

于 2013-01-06T22:53:21.810 に答える