回答:
編集:要素は動的に挿入されるため、例のように委任on()
を使用する必要がありますが、@ Marcコメントとして、IEではkeypressイベントが非文字キーをキャプチャしないため、それをkeydownイベントにバインドする必要があります。
$("#parentOfTextbox").on('keydown', '#textbox', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
e.preventDefault();
// call custom function here
}
});
こちらの例を確認してください。
$('#textbox').live('keypress', function(e) {
if (e.keyCode === 9) {
e.preventDefault();
// do work
}
});
タブでキーダウンを使用する際の重要な部分は、タブが常に何かをしようとすることを知っていることです。最後に「falseを返す」ことを忘れないでください。
これが私がしたことです。.blurで実行される関数と、フォームのフォーカスがある場所を入れ替える関数があります。基本的に、フォームの最後に入力を追加し、ぼかしの計算を実行しながらそこに移動します。
$(this).children('input[type=text]').blur(timeEntered).keydown(function (e) {
var code = e.keyCode || e.which;
if (code == "9") {
window.tabPressed = true;
// Here is the external function you want to call, let your external
// function handle all your custom code, then return false to
// prevent the tab button from doing whatever it would naturally do.
focusShift($(this));
return false;
} else {
window.tabPressed = false;
}
// This is the code i want to execute, it might be different than yours
function focusShift(trigger) {
var focalPoint = false;
if (tabPressed == true) {
console.log($(trigger).parents("td").next("td"));
focalPoint = $(trigger).parents("td").next("td");
}
if (focalPoint) {
$(focalPoint).trigger("click");
}
}
});
この JQuery API を使用してイベントタブをキャプチャできます。
$( "#yourInputTextId" ).keydown(function(evt) {
if(evt.key === "Tab")
//call your function
});