Как обнаружить нажатие клавиши escape с помощью чистого JS или jQuery?

Проверять каждый элемент на каждый другой элемент

Наивное решение - проверять каждый элемент на каждый другой элемент. Это расточительно и дает решение O (n2), даже если вы только переходите вперед.

Сортировка, а затем удаление дубликатов

Лучшее решение сортирует массив, а затем проверяет каждый элемент рядом с ним, чтобы найти дубликаты. Выберите эффективную сортировку, и это O (n log n).

Недостаток решения на основе сортировки не поддерживается. Однако дополнительный шаг может позаботиться об этом. Поместите все записи (в уникальном отсортированном массиве) в хеш-таблицу, которая имеет доступ O (1). Затем перебираем исходный массив. Для каждого элемента проверьте, находится ли он в хеш-таблице. Если это так, добавьте его в результат и удалите из хеш-таблицы. Вы получите результирующий массив, который имеет порядок оригинала, причем каждый элемент находится в том же положении, что и его первое вхождение.

Линейные сортировки целых чисел

Если вы имея дело с целыми числами некоторого фиксированного диапазона, вы можете сделать еще лучше, используя сортировку radix. Если вы предполагаете, что все номера находятся в диапазоне от 0 до 1 000 000, например, вы можете выделить бит-вектор около 1000,001. Для каждого элемента в исходном массиве вы устанавливаете соответствующий бит на основе его значения (например, значение 13 приводит к установке 14-го бита). Затем перейдите к исходному массиву, проверьте, находится ли он в битовом векторе. Если это так, добавьте его в массив результатов и очистите этот бит от битового вектора. Это O (n) и пространство трейдинга для времени.

Решение хэш-таблицы

Это приводит нас к лучшему решению всего: сортировка на самом деле является отвлечением, хотя и полезным. Создайте хэш-таблицу с доступом O (1). Перейдите к исходному списку. Если он уже не в хэш-таблице, добавьте его в массив результатов и добавьте его в хеш-таблицу. Если он находится в хеш-таблице, игнорируйте его.

Это, безусловно, лучшее решение. Так почему же остальные? Потому что такие проблемы связаны с адаптацией знаний, которые у вас есть (или должны иметь) к проблемам, и их уточнения на основе предположений, которые вы принимаете в решении. Разработка решения и понимание мышления, стоящего за ним, гораздо полезнее, чем срывание решения.

Кроме того, хеш-таблицы не всегда доступны. Возьмите встроенную систему или что-то там, где пространство ОЧЕНЬ ограничено. Вы можете реализовать быструю сортировку в нескольких кодах операций, гораздо меньше, чем любая хеш-таблица.

476
задан Karol Selak 12 November 2017 в 10:31
поделиться

3 ответа

Примечание. keyCode - становится устаревшим , используйте вместо него ключ .

function keyPress (e) {
    if(e.key === "Escape") {
        // write your logic here.
    }
}

Вот jsfiddle


keyCode устарел

Кажется, keydown и keyup работают, хотя keypress не может


$(document).keyup(function(e) {
     if (e.key === "Escape") { // escape key maps to keycode `27`
        // <DO YOUR WORK HERE>
    }
});

Какой код для escape-клавиши с jQuery

910
ответ дан 22 November 2019 в 22:43
поделиться

проверьте keyCode && , который & keyup || keydown

$(document).keydown(function(e){
   var code = e.keyCode || e.which;
   alert(code);
});
15
ответ дан 22 November 2019 в 22:43
поделиться

Событие keydown отлично подойдет для Escape и имеет то преимущество, что позволяет использовать keyCode во всех браузерах. Также необходимо прикрепить слушателя к document, а не к body.

Обновление май 2016 года

keyCode сейчас находится в процессе устаревания, и большинство современных браузеров теперь предлагают свойство key хотя вам все еще понадобится fallback для поддержки приличного браузера (на момент написания статьи текущие выпуски Chrome и Safari не поддерживают его).

Обновление сентября 2018 года evt.key теперь поддерживается всеми современными браузерами.

document.onkeydown = function(evt) { evt = evt || window.event; var isEscape = false; if ("key" in evt) { isEscape = (evt.key === "Escape" || evt.key === "Esc"); } else { isEscape = (evt.keyCode === 27); } if (isEscape) { alert("Escape"); } } };
Нажмите на меня, затем нажмите клавишу Escape
197
ответ дан 22 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: