Отправка формы по Ctrl + Enter
Привет, мир. Задача следующего описания. Есть форма. По нажатию на Ctrl + Enter или Cmd + Enter нужно выполнить отправку. Есть тонкий момент с кодами клавиш. Задача еще несколько усложняется, если есть проверка PHP, установлена ли переменная.
Сначала с кодами клавиш. С Enter все понятно. Это 13 (dec). С Ctrl тоже все ясно. Это либо 17 (dec), либо ctrlKey. Вот с Cmd чуть иначе. Она может быть и 17, и 224, и 91, и 93 (все коды десятичные). В зависимости от браузера. Выяснять, конечно, экспериментом. Просто в onkeydown поместить alert(event.keyCode). Или попробуйте воспользоваться event.metaKey. У меня отлично работает.
Теперь в чем может быть мелкая сложность использования JS и PHP совместно. Если обработкой результата и выводом занимается один файл, то есть action для формы пустой, и при этом для отправки используется document.forms["formName"].submit(), то PHP никогда не выполнится. Потому что не будет выполнена проверка isset($_POST["nameOfYourSubmitButton"]). Если попытаться в условии JS открыть тег PHP и задать там эту переменную, конечно, ничего не выйдет. В этом случае переменная всегда будет установлена. Проверка теряет смысл. Выход очевиден. Не использовать submit(), использовать click() для кнопки отправки. Предварительно задать кнопке уникальный идентификатор.
<script> function submitOnCtrlEnter() { if (event.keyCode == 13 && (event.ctrlKey || event.metaKey)) { document.getElementById("idOfYourSubmitButton").click(); } } </script>
<form method="post" action="" onkeydown="submitOnCtrlEnter()"> <!-- Some fields and submit button --> </form>
<?php if (isset($_POST["nameOfYourSubmitButton"])) { /* Let it code, let it code, let it code... */ } ?>
Комментарии
Григорий Михалычъ
Хех, недавно искал эту хрень. Нашёл другое решение