カーソルがTEXTAREA内にあり、Ctrl+Enterが押されたときに何かをトリガーするにはどうすればよいですか?jQueryを使用します。ありがとう
回答:
event.ctrlKey
フラグを使用してCtrl、次のようにキーが押されているかどうかを確認できます。
$('#textareaId').keydown(function (e) {
if (e.ctrlKey && e.keyCode == 13) {
// Ctrl-Enter pressed
}
});
上記のスニペットをここで確認してください。
10
ではなく、になり13
ます。
keypress
イベントの場合、キーコードは10になりますが、keydown
またはkeyup
13を報告します。テストクロムのみ
ctrlKey
Macのコマンドキーに対応していますか?
if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
ユニバーサルソリューション
これはmacOSもサポートします。Ctrl+Enterと⌘ Command+の両方Enterが受け入れられます。
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
// do something
}
e.ctrlKey
検出⌃ Control
してe.metaKey
検出し⌘ Command
ます。Ctrl-EnterとCommand-Enterの両方で動作をトリガーする場合は、これを使用します。
e.keyCode
の10
を受け入れる理由を説明できます13
か?MDNのkeyCode
ドキュメントのみリスト13
入力の可能な値として、複数のブラウザとオペレーティングシステム間でテストしました。
他の人の回答が不完全であるか、クロスブラウザ互換ではないことがわかりました。
このコードはグーグルクロームで動作します。
$(function ()
{
$(document).on("keydown", "#textareaId", function(e)
{
if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
{
alert('ctrl+enter');
}
});
});
これは、次のように、シンプルだが柔軟なJQueryプラグインに拡張できます。
$.fn.enterKey = function (fnc, mod) {
return this.each(function () {
$(this).keypress(function (ev) {
var keycode = (ev.keyCode ? ev.keyCode : ev.which);
if ((keycode == '13' || keycode == '10') && (!mod || ev[mod + 'Key'])) {
fnc.call(this, ev);
}
})
})
}
したがって、
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
ユーザーがctrl-Enterを押したときに、フォームのテキスト領域にフォーカスしてフォームを送信する必要があります。
ゲームに少し遅れるかもしれませんが、これが私が使用するものです。また、カーソルの現在のターゲットであるフォームの送信を強制します。
$(document.body).keypress(function (e) {
var $el = $(e.target);
if (e.ctrlKey && e.keyCode == 10) {
$el.parents('form').submit();
} else if (e.ctrlKey && e.keyCode == 13) {
$el.parents('form').submit();
}
});
if
… else if
」を1つに簡略化できif (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
ます。