Как мне вызвать что-то, когда курсор находится в пределах ТЕКСТА и нажата кнопка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. Только тестовый хром
На самом деле это помогает и работает во всех браузерах:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
ссылка на скрипку js .
Примечания:
keyCode
10, а не 13 ( отчет об ошибке ). Так что нам нужно проверить и то, и другое.ctrlKey
есть controlв Windows, Linux и macOS (нет command). См. Также metaKey
.ctrlKey
соответствует клавише Command на 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
означает Enter в дополнение к 13
? В документации MDNkeyCode
указано только 13
возможное значение для Enter, протестированное в нескольких браузерах и операционных системах.
Я нашел ответы других либо неполными, либо несовместимыми с кроссбраузерностью.
Этот код работает в Google Chrome.
$(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 с фокусом на текстовом поле этой формы.
(С благодарностью https://stackoverflow.com/a/9964945/1017546 )
Возможно, немного опоздал с игрой, но вот что я использую. Он также принудительно отправит форму, которая является текущей целью курсора.
$(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
» до одного if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.