Вопрос по jquery, javascript, asp.net, asp.net-mvc – Обработка нажатия пользователем клавиши «Ввод» на веб-сайте ASP.NET MVC.

25

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

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

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

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

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

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

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

Если это действительно должна быть классическая кнопка сброса, вы должныstrongly рассмотрите возможность его удаления:useit.com/alertbox/20000416.html Matthew Groves

Ваш Ответ

6   ответов
3

the first submit button will be assumed if a user press the 'Enter' key.

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

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

Когда имеется несколько кнопок, это полный дерьмовый выстрел. Некоторые браузерыdecide что первая кнопка (и определение первой может различаться - большинство используют первую, упомянутую в дереве HTML, в то время как другие пытаются использовать положение экрана), щелкают и используют ее в представлении, в то время как другие браузеры (особенно некоторые версии IE) ) сделать столь же правильное предположение, чтоno specific button была нажата, и поэтому не включайте buttonName = buttonValue (остальная часть формы отправляется нормально).

0

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

4

ть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 и OK будут работать так, как они должны, и вам нужно будет только обработать нажатие кнопки Назад с помощью Javascript.

Edit: Другой вариант - поместить кнопки «Сброс» и «Назад» в каждой в своих формах внутри фреймов. Тогда они будут игнорироваться главной формой и не будут кнопками по умолчанию. Кроме того, это позволило бы вам указывать на различные действия сервера, если это необходимо, и не было бы никакой зависимости от Javascript для действий кнопки.

Мне нужно сбросить, чтобы быть кнопкой отправки, потому что мне тоже нужно очистить некоторые данные сессии, но спасибо +1 oscarkuo
3

плагин горячих клавишВы можете сделать такой подход:

$(document).bind('keydown', 'return', function (evt){
    $.next("input[value='OK']").trigger("click");
    return false;
});
& APOS; следующая & APOS; больше не находится в области видимости для jquery, но удалите это, и это работает.
35

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

Все три из них являются кнопками отправки. Сброс является вводом типа = «сброс». Получите это отсортировано. Во-вторых, я успешно реализовал нечто подобное, и это работает на 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);

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

@kuoson - просто мысль, но, возможно, ваш код действительно работал, а & apos; === & apos; оператор нарушил условие в вашем обработчике нажатия клавиш. Я действительно задавался вопросом об этом, прежде чем опубликовать свой ответ.
10

$(function(){
    $('input').keydown(function(e){
        if (e.keyCode == 13) {
            $("input[value='OK']").focus().click();
            return false;
        }
    });
});
Спасибо. Этот пост работал для меня.

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