Виконання клавіші Enter у формі HTML, яку подаєте, замість кнопки активації


81

У мене є форма HTML з одним submitвходом, але також різні buttonелементи. Коли користувач натискає клавішу `` Enter '', я очікував би, що він справді надішле форму, але натомість (принаймні в Chrome 15) я виявляю, що вона запускає першу button(оскільки це відбувається раніше в HTML, ніж submitвведення) , Я вважаю).

Я знаю, що загалом ви не можете змусити браузери віддавати перевагу певному submitвведенню, але я дійсно думав, що вони віддадуть перевагу submitвведенням над buttonелементами. Чи можу я зробити невеликий підхід до HTML, щоб зробити цю роботу, або мені доведеться застосувати якийсь підхід Javascript?

Ось приблизний макет HTML:

<form action="form.php" method="POST">
    <input type="text" name="field1"/>
    <button onclick="return myFunc1()">Button 1</button>
    <input type="submit" name="go" value="Submit"/>
</form>

Перевірити це питання: stackoverflow.com/a/925387/1031900
Офір Farchy

1
@OfirFarchy Я думаю, те, що я думав, зробило це питання іншим, полягає в тому, що подається лише ОДИН, інші - це всі кнопки.
andygeers

Ну, якщо ви не заперечуєте проти використання JS та jQuery, перевірте відповіді мого та
Девіда

Відповіді:


143

Вам не потрібен JavaScript, щоб вибрати кнопку або введення за замовчуванням. Вам просто потрібно позначити це type="submit", а інші кнопки позначити їх type="button". У вашому прикладі:

<button type="button" onclick="return myFunc1()">Button 1</button>
<input type="submit" name="go" value="Submit"/>

4
Це насправді працює не так, як очікувалося в деяких браузерах. Я щойно натрапив на цю проблему сьогодні, думаючи, що type = "submit" зробить це за замовчуванням, однак цього не відбувається в Chrome або Safari.
Бен Девіс,

5
Це працює для мене в Chrome і Safari. Це має бути щось інше.
Jesús Carrera

15
Різницю має значення встановлення type = "button" на додаткових кнопках AND setting type = "submit".
Олексій

21
Причина, по якій це не працює, якщо ви не встановите, type="button"полягає в тому, що за замовчуванням елементи кнопок є type="submit". Тож передумова у питанні, що існувала лише одна кнопка подання, насправді була неправильною.
Елезар

30

Ви можете використовувати jQuery:

$(function() {
    $("form input").keypress(function (e) {
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
            $('button[type=submit] .default').click();
            return false;
        } else {
            return true;
        }
    });
});

14
Оскільки це прийнята відповідь: прокрутіть униз, щоб отримати дуже просте рішення лише для HTML.
jlh

2
Рішення HTML - це правильна відповідь. Браузер обробляє за замовчуванням
Едвард Ньюсом

Я знаю, що це стара відповідь, але вам не потрібно використовувати це „важке обладнання” для вирішення цієї проблеми. Використовуйте рішення лише для HTML (відповідь @ Jesús Carrera), браузер це вирішує зараз.
Martijn Luyckx

1
Приємна річ цього підходу - хоча так, він вимагає jQuery / JavaScript - це те, що він буде працювати, навіть якщо вам потрібно мати кілька кнопок подання у вашій формі. У конкретному селекторі в цьому прикладі не повинно бути пробілу після, button[type=submit]однак, припускаючи, що ви позначили свою кнопку надсилання за замовчуванням defaultкласом css.
Крістофер Кінг

4

Спробуйте це, якщо натиснута клавіша введення, ви можете зробити це так, наприклад, я розробив відповідь днями кнопку html вказати вибрану , подивіться, чи допомагає це.

Вкажіть назву форми, як, наприклад, yourFormNameтоді ви зможете надіслати форму, не фокусуючись на формі.

document.onkeypress = keyPress;

function keyPress(e){
  var x = e || window.event;
  var key = (x.keyCode || x.which);
  if(key == 13 || key == 3){
   //  myFunc1();
   document.yourFormName.submit();
  }
}

якщо у формі більше кнопок подання, це допоможе: <input type = "submit" id = "submit" value = "ok" /> document.getElementById ("submit"). click ();
Muflix

Це тупий спосіб обійти поведінку за замовчуванням у HTML. Див. Відповідь вище, чому.
alttag


3

Я просто зіткнувся з проблемою з цим. У мене було відмова від зміни inputна a, buttonі я мав погано написаний />термінатор тегів:

Отже, я мав:

<button name="submit_login" type="submit" class="login" />Login</button>

І щойно внесли зміни до нього, щоб:

<button name="submit_login" type="submit" class="login">Login</button>

Зараз працює як шарм, завжди дратівливі дрібниці ... HTH


2

Враховуючи, що існує лише одна (або з цим рішенням потенційно навіть не одна) кнопка надсилання, ось рішення на основі jQuery, яке працюватиме для кількох форм на одній сторінці ...

<script type="text/javascript">
    $(document).ready(function () {

        var makeAllFormSubmitOnEnter = function () {
            $('form input, form select').live('keypress', function (e) {
                if (e.which && e.which == 13) {
                    $(this).parents('form').submit();
                    return false;
                } else {
                    return true;
                }
            });
        };

        makeAllFormSubmitOnEnter();
    });
</script>

1

Я щойно закрутив це у Chrome, Firefox та IE10.

Як уже згадувалося вище, переконайтеся, що ви позначили тип = "button", "reset", "submit" тощо, щоб переконатися, що він правильно каскадує та вибрав правильну кнопку.

Можливо, також встановивши, що всі вони мають однакову форму (тобто все, що працювало у мене)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.