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

26
задан GEOCHET 20 October 2009 в 22:52
поделиться

6 ответов

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

<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);

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

36
ответ дан w00ngy 20 October 2009 в 22:52
поделиться
  • 1
    Примечание: Этот doesn' t, кажется, работают над Win7 x64 рабочая.NET 4.5. Броски Illegal characters in path из-за канала. – Simon Whitehead 9 November 2012 в 02:18
  • 2
    Примечание: Этот doesn' t, кажется, работают над Win7 x64 рабочая.NET 4.5. Броски Illegal characters in path из-за канала. – Simon Whitehead 9 November 2012 в 02:18
  • 3
    Примечание: Этот doesn' t, кажется, работают над Win7 x64 рабочая.NET 4.5. Броски Illegal characters in path из-за канала. – Simon Whitehead 9 November 2012 в 02:18
  • 4
    Примечание: Этот doesn' t, кажется, работают над Win7 x64 рабочая.NET 4.5. Броски Illegal characters in path из-за канала. – Simon Whitehead 9 November 2012 в 02:18
  • 5
    Примечание: Этот doesn' t, кажется, работают над Win7 x64 рабочая.NET 4.5. Броски Illegal characters in path из-за канала. – Simon Whitehead 9 November 2012 в 02:18

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

$(function(){
    $('input').keydown(function(e){
        if (e.keyCode == 13) {
            $("input[value='OK']").focus().click();
            return false;
        }
    });
});
10
ответ дан jitter 20 October 2009 в 22:52
поделиться

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

$(document).bind('keydown', 'return', function (evt){
    $.next("input[value='OK']").trigger("click");
    return false;
});
3
ответ дан Sinan 20 October 2009 в 22:52
поделиться
  • 1
    Спасибо. Мне нравится идея, но I' m не уверенный, как эффективный это должно было бы много раз называть GetFiles в цикле. – XSL 9 November 2012 в 02:11
  • 2
    Спасибо. Мне нравится идея, но I' m не уверенный, как эффективный это должно было бы много раз называть GetFiles в цикле. – XSL 9 November 2012 в 02:11
  • 3
    Спасибо. Мне нравится идея, но I' m не уверенный, как эффективный это должно было бы много раз называть GetFiles в цикле. – XSL 9 November 2012 в 02:11
  • 4
    Спасибо. Мне нравится идея, но I' m не уверенный, как эффективный это должно было бы много раз называть GetFiles в цикле. – XSL 9 November 2012 в 02:11
  • 5
    Спасибо. Мне нравится идея, но I' m не уверенный, как эффективный это должно было бы много раз называть GetFiles в цикле. – XSL 9 November 2012 в 02:11

Стандарт HTML, похоже, указывает, что первая кнопка отправки будет принята, если пользователь нажмет клавишу «Ввод».

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

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

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

3
ответ дан David 20 October 2009 в 22:52
поделиться

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

0
ответ дан Svend 20 October 2009 в 22:52
поделиться

У вас должна быть только одна кнопка отправки. Кнопка сброса должна иметь вид 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.

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

4
ответ дан 28 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

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