Как мне вызвать что-то, когда курсор находится в пределах ТЕКСТА и нажата кнопкаCtrl + Enter? Используя jQuery . Благодарность
92
Как мне вызвать что-то, когда курсор находится в пределах ТЕКСТА и нажата кнопка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 )
источник
$('my_text_area').focus(function{ set_focus_flag }); //ctrl on key down set flag //enter on key down = check focus flag, check ctrl flag
источник
сначала вы должны установить флаг при Ctrlнажатии, сделайте это onkeydown. тогда вы должны проверить нажатие клавиши ввода. снимите флаг, когда увидите клавиатуру для Ctrl.
источник
Возможно, немного опоздал с игрой, но вот что я использую. Он также принудительно отправит форму, которая является текущей целью курсора.
$(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))
.