Подтвердить что ты не робот

Обращение пользователя к нажатию клавиши 'Enter' на веб-сайте ASP.NET MVC

Я работаю над веб-сайтом ASP.NET MVC с несколькими кнопками отправки. то есть.

    <input type="submit" name="SubmitButton" value="Reset" />
    <input type="submit" name="SubmitButton" value="OK" />
    <input type="submit" name="SubmitButton" value="Back" />

Мне нужно разрешить пользователям быстро отправить форму, нажав клавишу 'Enter'. В стандарте HTML, как представляется, указывается, что первая кнопка отправки будет приниматься, если пользователь нажимает клавишу 'Enter'. Тем не менее, мне нужно сделать кнопку 2 (то есть кнопку "ОК" ) кнопкой по умолчанию, и по причинам, о которых я даже не хочу говорить, изменение порядка кнопок не является вариантом.

Я googled вокруг, и я нашел этот пост об использовании Page.Form.DefaultButton в ASP.NET, но это не работает с ASP.NET MVC.

Я также попробовал следующее решение javascript, хотя он работает в Chrome, но не работает в IE6

    $('body').keypress(function(e) {
       if (e.which === 13) {
          $("input[value='OK']").trigger('click');
       }
    });

Я могу подумать о некоторых действительно экстремальных решениях, таких как прохождение через каждый элемент управления в форме присоединения к ним вышеуказанной функции. Тем не менее, я не думаю, что очень аккуратное решение, поэтому мне интересно, есть ли у кого-то лучшее решение?

4b9b3361

Ответ 1

Во-первых, это неправильно:

<input type="submit" name="SubmitButton" value="Reset" />
<input type="submit" name="SubmitButton" value="OK" />
<input type="submit" name="SubmitButton" value="Back" />

Все три из них представляют кнопки отправки. A reset - вход типа = "reset". Получите это отсортировано. Во-вторых, я успешно реализовал что-то подобное, и он работает на IE6. Попробуйте следующее:

    function keypressHandler(e)
    {
        if(e.which == 13) {
            e.preventDefault(); //stops default action: submitting form
            $(this).blur();
            $('#SubmitButton').focus().click();//give your submit an ID
        }
    }

    $('#myForm').keypress(keypressHandler);

Часть focus() делает кнопку нажатой, когда пользователь нажимает кнопку ввода. Совершенно изящный.

Ответ 2

Используйте это.

$(function(){
    $('input').keydown(function(e){
        if (e.keyCode == 13) {
            $("input[value='OK']").focus().click();
            return false;
        }
    });
});

Ответ 3

У вас должна быть только одна кнопка отправки. Кнопка reset должна быть type="reset", а кнопка "Назад" должна быть type="button" следующим образом:

<input type="reset" name="ResetButton" value="Reset" />
<input type="submit" name="SubmitButton" value="OK" />
<input type="button" name="BackButton" value="Back" />

Затем reset и ОК будут работать так, как они должны, и вам нужно будет только обращаться с кнопкой "Назад" с помощью Javascript.

Изменить: Другой вариант - разместить кнопки reset и Back submit каждый в своих собственных формах внутри iframe. Затем они будут игнорироваться основной формой и не будут использоваться по умолчанию. Кроме того, это позволит вам указать их на различные действия сервера, если это необходимо, и не будет никакой зависимости от Javascript для действий кнопки.

Ответ 4

Поскольку вы используете jquery, если вы используете плагин hotkeys, вы можете сделать такой подход:

$(document).bind('keydown', 'return', function (evt){
    $.next("input[value='OK']").trigger("click");
    return false;
});

Ответ 5

Стандарт HTML, похоже, указывает, что первая кнопка отправки будет если пользователь нажимает кнопку 'Enter'ключ.

Нет, использование ключа ввода не определено, это приватное расширение, которое было добавлено при различных интерпретациях. В разных браузерах вы столкнетесь с различным поведением, и это может стать очень опасным, если вы начнете смешивать различные культурные или пользовательские условные обозначения о порядке слева и справа/справа налево.

Если в форме есть только одна кнопка, то все основные браузеры выполняют одно и то же поведение - они передают форму так, как если бы эта кнопка была нажата (кнопка buttonName = buttonValue включена в данные формы). Конечно, это не означает, что кнопки onclick handler будут запускаться - это поведение зависит от браузера.

Когда есть несколько кнопок, это полная стрельба дерьмом. Некоторые браузеры решают, что первая кнопка (и определение первого может меняться), большинство из них используют первый, упомянутый в дереве Html, в то время как другие пытаются использовать позицию экрана) было нажато и использовать его в представлении, в то время как другие браузеры (особенно некоторые версии IE) делают одинаково правильное предположение, что никакая конкретная кнопка не была нажата, и поэтому не включайте кнопкуName = buttonValue (остальная часть формы передается в порядке).

Ответ 6

Изменить порядок кнопок в источнике, но не визуально (т.е. использовать CSS для замены кнопок)?