Tabテキストボックス内のキーを使用して、4つのスペースをタブで移動できるようにしたいと思います。現在の状態では、Tabキーを押すとカーソルが次の入力にジャンプします。
UIに表示される前にテキストボックスのTabキーをキャプチャするJavaScriptはありますか?
一部のブラウザ(FireFoxなど)ではこれが許可されない場合があることを理解しています。Shift+ TabやCtrl+ などのカスタムキーコンボはどうQですか?
Tabテキストボックス内のキーを使用して、4つのスペースをタブで移動できるようにしたいと思います。現在の状態では、Tabキーを押すとカーソルが次の入力にジャンプします。
UIに表示される前にテキストボックスのTabキーをキャプチャするJavaScriptはありますか?
一部のブラウザ(FireFoxなど)ではこれが許可されない場合があることを理解しています。Shift+ TabやCtrl+ などのカスタムキーコンボはどうQですか?
回答:
keydown
/ keyup
イベントをキャプチャした場合でも、それらがタブキーによって発生する唯一のイベントですが、デフォルトのアクション(タブオーダーの次の項目に移動する)が発生しないようにする方法が必要です。
FirefoxではpreventDefault()
、イベントハンドラーに渡されたイベントオブジェクトのメソッドを呼び出すことができます。IEでは、イベントハンドルからfalseを返す必要があります。JQueryライブラリは、preventDefault
IEとFFで機能するイベントオブジェクトのメソッドを提供します。
<body>
<input type="text" id="myInput">
<script type="text/javascript">
var myInput = document.getElementById("myInput");
if(myInput.addEventListener ) {
myInput.addEventListener('keydown',this.keyHandler,false);
} else if(myInput.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
function keyHandler(e) {
var TABKEY = 9;
if(e.keyCode == TABKEY) {
this.value += " ";
if(e.preventDefault) {
e.preventDefault();
}
return false;
}
}
</script>
</body>
keycode
8
ますか?
前の答えは結構ですが、私は動作とプレゼンテーションの混合(HTMLにJavaScriptを置く)に強く反対する人の1人なので、イベント処理ロジックをJavaScriptファイルに入れることを好みます。さらに、すべてのブラウザーがイベント(またはe)を同じ方法で実装するわけではありません。ロジックを実行する前にチェックを行うことをお勧めします。
document.onkeydown = TabExample;
function TabExample(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var tabKey = 9;
if(evt.keyCode == tabKey) {
// do work
}
}
キーのデフォルトの動作を変更しないことをお勧めします。マウスに触れずにできる限り多くのことを行うので、タブキーをフォームの次のフィールドに移動しないようにすると、非常に悪化します。
ただし、ショートカットキーは、特に大きなコードブロックと入れ子の場合に役立ちます。通常、Shift-TABはフォームの前のフィールドに移動するため、不適切なオプションです。たぶん、ショートカットキーを使用して、コードタブを挿入するWMDエディターの新しいボタンが可能でしょうか。
ScottKoonのベストアンサーには問題があります
はい、これ
} else if(el.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
する必要があります
} else if(myInput.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
このため、IEでは動作しませんでした。ScottKoonがコードを更新することを期待
MacのChromeでは、alt-tabは<textarea>
フィールドにタブ文字を挿入します。
ここに1つあります。ウィー!