CTRL + S, чтобы отправить форму и все входные данные - PullRequest
12 голосов
/ 26 августа 2011

У меня есть форма, которую я использую в своей CMS, в которую я хотел бы добавить дополнительное открытие, чтобы сохранить форму при нажатии клавиши: "Ctrl + S"

Это работает для всех вводов, кроме кнопок отправкиэтот простой пример показывает, что я имею в виду:

<?php 
if(isset($_POST['save'])){
    die('save= ' . $_POST['save']);
}
?>
<!doctype html>
<html>
<head>
    <meta charset="utf-8" />

    <title></title>

    <style type="text/css">
        html { height: 100%; }
        body {
            color: #262626;
            background: #f4f4f4;
            font: normal 12px/18px Verdana, sans-serif;
            height: 100%;
        }
        #container {
            width: 760px;
            margin: 0 auto;
            padding: 10px 60px;
            border: solid 1px #cbcbcb;
            background: #fafafa;
            -moz-box-shadow: 0px 0px 10px #cbcbcb;
            -webkit-box-shadow: 0px 0px 10px #cbcbcb;

            min-height: 100%;
            height: auto !important;
            height: 100%;
        }

    </style>

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script type="text/javascript">
    (function($){
        $(document).ready(function(){   

            // Save Form
            $(window).keypress(function(event) {
                if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
                $("#container form").submit();
                event.preventDefault();
                return false;
            });

        });
    })(jQuery);
    </script>
</head>

<body>
    <div id="container">

        <form action="" method="post">
            <label for="">Name</label>
            <input type="text=" name="name" value="" />

            <input name="save" type="submit" value="Save" />
            <input name="create" type="submit" value="Create" />

        </form>

    </div>
</body>
</html>

Ответы [ 3 ]

10 голосов
/ 26 августа 2011

Значение кнопки submit включается в запрос, только если была нажата кнопка submit.

Поскольку вы отправляете форму напрямую (используя JS), вы не нажимаете кнопку отправки, поэтому ни одна из них не была отправлена.

Вместо вызова .submit() в форме, попробуйте позвонить .click() на кнопку отправки, которую вы хотите включить.

$(window).keypress(function(event) {
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
    $("#container form input[name=save]").click();
    event.preventDefault();
    return false;
});
3 голосов
/ 26 августа 2011

Попробуйте:

if($("#container form :submit:first").length)
{
   $("#container form :submit:first").click();
}
else
{
  $("#container form").submit();
}

Это вызовет нажатие на первую кнопку отправки (если доступно)

1 голос
/ 26 августа 2011

В форме не задано значение действия, и существует более одного ввода для отправки.

Несколько отправок может прервать .submit (), но я так не думаю - ядумайте, что отсутствие действия для отправки формы является причиной того, что она, похоже, ничего не делает.

РЕДАКТИРОВАНИЕ / ИСПРАВЛЕНИЕ:

С момента публикации этого ответа я узнал о нескольких вещах (спасибо@JohnMagnolia), поэтому позвольте мне исправить себя:

Фактически пустые атрибуты действий разрешены в HTML 4, но запрещены в HTML5.В большинстве случаев пустой атрибут действия приведет к отправке формы по текущему URL, включая параметры GET.Несколько кнопок отправки не являются проблемой, и не то, почему код не работал, см. Ответ @ Matt для правильного ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...