• Александр Черный
  • Блог
  • Проекты
  • О себе
  • RSS
22 апреля 2011

Отправка формы по 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... */
    }
?>

javascript   

Комментарии

Григорий Михалычъ

Хех, недавно искал эту хрень. Нашёл другое решение

Ваш комментарий


(не будет опубликован)


© Александр Черный, 2009–2026

Служебный вход

Работает на YAPSE, β