Несколько кнопок отправки в HTML-форме

Допустим, вы создали мастер в форме HTML. Одна кнопка идет назад, а другая - вперед. Поскольку кнопка назад появляется первой в разметке, когда вы нажимаете Enter, она будет использовать эту кнопку для отправки формы.

Пример:

<form>
  <!-- Put your cursor in this field and press Enter -->
  <input type = "text" name = "field1" />

  <!-- This is the button that will submit -->
  <input type = "submit" name = "prev" value = "Previous Page" />

  <!-- But this is the button that I WANT to submit -->
  <input type = "submit" name = "next" value = "Next Page" />
</form>

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

Просто используйте для float: left

bluejayke 15.08.2020 02:31
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
274
1
229 789
26
Перейти к ответу Данный вопрос помечен как решенный

Ответы 26

Дайте вашим кнопкам отправки такое же имя, как это:

<input type = "submit" name = "submitButton" value = "Previous Page" />
<input type = "submit" name = "submitButton" value = "Next Page" />

Когда пользователь нажимает Enter и запрос переходит на сервер, вы можете проверить значение submitButton в коде на стороне сервера, который содержит набор пар форм name/value. Например, в ASP Classic:

If Request.Form("submitButton") = "Previous Page" Then
    ' Code for the previous page
ElseIf Request.Form("submitButton") = "Next Page" Then
    ' Code for the next page
End If

Ссылка: Использование нескольких кнопок отправки в одной форме

Это не то, о чем спрашивал пользователь. Пользователь хотел знать, как контролировать, какая кнопка отправки в форме активируется при нажатии клавиши ввода, т.е. это кнопка по умолчанию.

kosoant 06.11.2009 14:14

не работает в приложении I18n, где вы даже не знаете названия кнопки.

Chris 05.03.2010 20:34

В какой системе или технологическом решении сам сервер не знал бы, какая метка использовалась для кнопки «Далее» и «Назад»? Разве сервер не сгенерировал кнопки «Далее» и «Назад»? (Если локализация выполняется на стороне клиента, я полагаю, что сервер может не знать, но я никогда не слышал об этом для HTML)

Jay 15.04.2019 15:30

В этом ответе полностью отсутствует вопрос, скорее всего, это другой вопрос. Почему так много голосов за ??? Не говоря уже о том, что никогда не следует проверять метку кнопки ... вызывает много проблем. Даже простой случай: «мы должны сократить строку до« Предыдущая страница »» испортит функциональность вашего сайта.

Tylla 05.05.2020 02:30

Измените предыдущий тип кнопки на такую:

<input type = "button" name = "prev" value = "Previous Page" />

Теперь кнопка Следующий будет по умолчанию, плюс вы также можете добавить к ней атрибут default, чтобы ваш браузер выделил ее следующим образом:

<input type = "submit" name = "next" value = "Next Page" default />
О каком атрибуте default вы говорите? There is no "default" attribute, which would be valid: w3.org/html/wg/drafts/html/master/… (not in HTML5, HTML 4.01 Transitional/Strict, XHTML 1.0 Strict). And I don't see why changing the input type from submit to button would be better. You can have multiple submit type input elements in one form without a problem. I don't really understand why this answer is so upvoted.
Sk8erPeter 19.05.2013 14:18

Наличие ввода типа «кнопка» не выполняет действие формы. У вас может быть onclick или что-то в этом роде, таким образом выполняя другую функцию, чем действие формы «по умолчанию» (которое выполняется нажатием кнопки типа «отправить»). Это то, что я искал, и поэтому я проголосовал за это. Не могу говорить об атрибуте "default", это не было частью моей проблемы;) Тем не менее, спасибо за ваше разъяснение.

Jonas 18.02.2014 16:53

@ Sk8erPeter, @Jonas .... хм .. Я подозреваю, что этот атрибут default является глобальным атрибутом; перечисляемый атрибут .., который относится к состояниям перечисления: w3.org/html/wg/drafts/html/master/…. кроме этого пункта ... аспект кнопки этого ответа не является ответом ... это 'условное предложение' или запрос (сам вопрос).

Brett Caswell 06.02.2015 20:28

неважно ... Я только что понял, что он на самом деле предоставляет обходной путь в этом ответе ... превращая первый ввод в кнопку, чтобы второй ввод вызывал событие щелчка при нажатии клавиши ввода ... хотя ... все еще условно

Brett Caswell 06.02.2015 20:39

@Jonas: да, type = "button" не отправляет форму, type = "submit" отправляет, но изменение типа этих кнопок определенно не является решением, потому что эти кнопки в основном должны вести себя одинаково - вопрос OP заключался в том, как сделать «Далее» Кнопка по умолчанию для нажатия клавиши Enter. И в принятом ответе есть возможное решение.

Sk8erPeter 08.02.2015 13:12

@BrettCaswell: изменение типа этих кнопок - плохой обходной путь (см. Мой предыдущий комментарий). В HTML нет действительного атрибута default для тегов input (как я уже говорил ранее), и (популярные) браузеры НЕ будут выделять кнопку с этим атрибутом, что означает, что нет нестандартной реализации этого атрибута, поэтому я все еще не делаю этого. Я не знаю, о чем говорил @Wally Lawless и почему этот ответ так переоценен. В HTML5 введен только один действительный атрибут default, НО только для тега <track>: developer.mozilla.org/en-US/docs/Web/HTML/Element/track

Sk8erPeter 08.02.2015 13:17

Если тот факт, что первая кнопка используется по умолчанию, одинаков для всех браузеров, поместите их в исходный код правильно, а затем используйте CSS для переключения их видимых положений.

float их влево и вправо, например, для визуального переключения.

Я бы использовал JavaScript для отправки формы. Функция будет запускаться событием OnKeyPress элемента формы и определять, был ли выбран ключ Enter. Если это так, он отправит форму.

Вот две страницы, которые объясняют, как это сделать: 1, 2. Исходя из этого, вот пример использования (на основе здесь):

<SCRIPT TYPE = "text/javascript">//<!--
function submitenter(myfield,e) {
  var keycode;
  if (window.event) {
    keycode = window.event.keyCode;
  } else if (e) {
    keycode = e.which;
  } else {
    return true;
  }

  if (keycode == 13) {
    myfield.form.submit();
    return false;
  } else {
    return true;
  }
}
//--></SCRIPT>

<INPUT NAME = "MyText" TYPE = "Text" onKeyPress = "return submitenter(this,event)" />

Что будет, если отключен javascript?

Jon Winstanley 13.04.2009 14:18

You shouldn't use чтобы закомментировать JS, эти теги не являются языковыми токенами Javascript

Marecky 28.01.2013 15:44

@Marecky They're not to comment out JS. They are ignored when parsing the contents of

leemes 12.04.2013 01:57

Используя приведенный вами пример:

<form>
    <input type = "text" name = "field1" /><!-- Put your cursor in this field and press Enter -->
    <input type = "submit" name = "prev" value = "Previous Page" /> <!-- This is the button that will submit -->
    <input type = "submit" name = "next" value = "Next Page" /> <!-- But this is the button that I WANT to submit -->
</form>

Если вы нажмете «Предыдущая страница», будет отправлено только значение «prev». Если вы нажмете «Следующая страница», будет отправлено только значение «следующая».

Если, однако, вы нажмете Enter где-нибудь в форме, ни «предыдущая», ни «следующая» не будут отправлены.

Таким образом, используя псевдокод, вы можете сделать следующее:

If "prev" submitted then
    Previous Page was click
Else If "next" submitted then
    Next Page was click
Else
    No button was click

Никогда не бывает ситуации (без использования js), когда ни одна из кнопок не срабатывает. Если вы нажмете ENTER, первая кнопка в коде перехватит событие. В html-примере это кнопка prev.

SimonSimCity 14.12.2011 19:53

Если вы действительно хотите, чтобы он работал как диалог установки, просто переключите фокус на кнопку «Далее» OnLoad.

Таким образом, если пользователь нажимает Return, форма отправляется и отправляется вперед. Если они хотят вернуться, они могут нажать Tab или нажать кнопку.

Они означают, что кто-то заполняет форму и возвращает нажатие в текстовом поле.

Jordan Reiter 10.01.2013 00:37

Это невозможно сделать с помощью чистого HTML. Для этого трюка вы должны полагаться на JavaScript.

Однако, если вы разместите две формы на странице HTML, вы сможете это сделать.

Form1 будет иметь предыдущую кнопку.

Form2 будет иметь любые пользовательские вводы + следующая кнопка.

Когда пользователь нажимает Enter в Form2, срабатывает кнопка Next submit.

Ответ принят как подходящий

Надеюсь, это поможет. Я просто проделываю трюк float, перемещая кнопки вправо.

Таким образом, кнопка Prev остается слева от кнопки Next, но Next занимает первое место в структуре HTML:

.f {
  float: right;
}
.clr {
  clear: both;
}
<form action = "action" method = "get">
  <input type = "text" name = "abc">
  <div id = "buttons">
    <input type = "submit" class = "f" name = "next" value = "Next">
    <input type = "submit" class = "f" name = "prev" value = "Prev">
    <div class = "clr"></div><!-- This div prevents later elements from floating with the buttons. Keeps them 'inside' div#buttons -->
  </div>
</form>

Преимущества по сравнению с другими предложениями: нет кода JavaScript, доступен, и обе кнопки остаются type = "submit".

Не делайте этого, не изменив также порядок вкладок, чтобы нажатие кнопки вкладки циклически перемещало кнопки по мере их появления на экране.

Steve 11.10.2012 19:02

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

Tylla 20.07.2020 01:49

Это работает без JavaScript или CSS в большинстве браузеров:

<form>
    <p><input type = "text" name = "field1" /></p>
    <p><a href = "previous.html">
    <button type = "button">Previous Page</button></a>
    <button type = "submit">Next Page</button></p>
</form>

Firefox, Opera, Safari и Google Chrome работают.
Проблема, как всегда, в Internet Explorer.

Эта версия работает при включенном JavaScript:

<form>
    <p><input type = "text" name = "field1" /></p>
    <p><a href = "previous.html">
    <button type = "button" onclick = "window.location='previous.html'">Previous Page</button></a>
    <button type = "submit">Next Page</button></p>
</form>

Итак, недостаток этого решения:

Предыдущая страница не работает, если вы используете Internet Explorer с отключенным JavaScript.

Имейте в виду, кнопка возврата все еще работает!

Без javascript вы не сможете активировать кнопку "предыдущая страница", потому что type = "button"!

riskop 09.01.2018 17:33

Проблема с вашим предложением заключается в том, что button type = "button" не будет публиковать форму, поэтому в основном ничего не делает, в то время как вторая версия с привязкой создаст GET вместо POST.

Tylla 05.05.2020 02:43

Вы можете сделать это с помощью CSS.

Поместите кнопки в разметку сначала кнопкой Next, затем кнопкой Prev.

Затем используйте CSS, чтобы расположить их так, как вы хотите.

<input type = "submit" name = "prev" value = "Previous Page"> 
<input type = "submit" name = "prev" value = "Next Page"> 

Оставьте названия всех кнопок отправки одинаковыми: «prev».

Единственное отличие - это атрибут value с уникальными значениями. Когда мы создаем скрипт, эти уникальные значения помогут нам выяснить, какая из кнопок отправки была нажата.

И напишите следующую кодировку:

    btnID = ""
if Request.Form("prev") = "Previous Page" then
    btnID = "1"
else if Request.Form("prev") = "Next Page" then
    btnID = "2"
end if

Проблема в том, что нажатие Enter в текстовом поле отправит форму с первой кнопкой отправки, а не с предполагаемой (второй в примере). Узнать, какая кнопка отправки использовалась для отправки формы, несложно, и вопрос не в этом!

riskop 09.01.2018 17:26

Почему name = "perv"?

Peter Mortensen 14.07.2019 17:45

Иногда решения, предоставленного @palotasb, недостаточно. Есть случаи использования, когда, например, кнопка «Фильтр» для отправки размещается над такими кнопками, как «Далее» и «Назад». Я нашел обходной путь для этого: копировать кнопка отправки, которая должна действовать как кнопка отправки по умолчанию в скрытом div и поместить ее в форму над любой другой кнопкой отправки. Технически он будет отправлен другой кнопкой при нажатии Enter, чем при нажатии на видимую кнопку Next. Но поскольку имя и значение совпадают, в результате нет никакой разницы.

<html>
<head>
    <style>
        div.defaultsubmitbutton {
            display: none;
        }
    </style>
</head>
<body>
    <form action = "action" method = "get">
        <div class = "defaultsubmitbutton">
            <input type = "submit" name = "next" value = "Next">
        </div>
        <p><input type = "text" name = "filter"><input type = "submit" value = "Filter"></p>
        <p>Filtered results</p>
        <input type = "radio" name = "choice" value = "1">Filtered result 1
        <input type = "radio" name = "choice" value = "2">Filtered result 2
        <input type = "radio" name = "choice" value = "3">Filtered result 3
        <div>                
            <input type = "submit" name = "prev" value = "Prev">
            <input type = "submit" name = "next" value = "Next">
        </div>
    </form>
</body>
</html>

Для этого достаточно изменить порядок табуляции. Будь проще.

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

Порядок табуляции игнорируется при выборе кнопки по умолчанию. Согласно спецификации HTML: A form element's default button is the first submit button in tree order whose form owner is that form element.

Tylla 20.07.2020 01:54

Вот что я пробовал:

  1. Убедитесь, что вы даете своим кнопкам разные имена.
  2. Напишите инструкцию if, которая будет выполнять необходимое действие при нажатии любой кнопки.

<form>
    <input type = "text" name = "field1" /> <!-- Put your cursor in this field and press Enter -->

    <input type = "submit" name = "prev" value = "Previous Page" /> <!-- This is the button that will submit -->
    <input type = "submit" name = "next" value = "Next Page" /> <!-- But this is the button that I WANT to submit -->
</form>

В PHP

if (isset($_POST['prev']))
{
    header("Location: previous.html");
    die();
}

if (isset($_POST['next']))
{
    header("Location: next.html");
    die();
}

Проблема в том, что нажатие Enter в текстовом поле отправит форму с первой кнопкой отправки, а не с предполагаемой (второй в примере). Узнать, какая кнопка отправки использовалась для отправки формы, несложно, и вопрос не в этом!

riskop 09.01.2018 17:26

Если у вас есть несколько активных кнопок на одной странице, вы можете сделать что-то вроде этого:

Отметьте первую кнопку, которую вы хотите активировать при нажатии клавиши Enter, как кнопку по умолчанию в форме. Для второй кнопки свяжите ее с кнопкой Backspace на клавиатуре. Код события Backspace - 8.

$(document).on("keydown", function(event) {
  if (event.which.toString() == "8") {
    var findActiveElementsClosestForm = $(document.activeElement).closest("form");

    if (findActiveElementsClosestForm && findActiveElementsClosestForm.length) {
      $("form#" + findActiveElementsClosestForm[0].id + " .secondary_button").trigger("click");
    }
  }
});
<script src = "https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>

<form action = "action" method = "get" defaultbutton = "TriggerOnEnter">
  <input type = "submit" id = "PreviousButton" name = "prev" value = "Prev" class = "secondary_button" />
  <input type = "submit" id='TriggerOnEnter' name = "next" value = "Next" class = "primary_button" />
</form>

Другой простой вариант - поместить кнопку возврата после кнопки отправки в HTML-коде, но разместить ее слева, чтобы она отображалась на странице перед кнопкой отправки.

Для этого достаточно изменить порядок табуляции. Будь проще.

От https://html.spec.whatwg.org/multipage/forms.html#implicit-submission

A form element's default button is the first submit button in tree order whose form owner is that form element.

If the user agent supports letting the user submit a form implicitly (for example, on some platforms hitting the "enter" key while a text field is focused implicitly submits the form)...

Если следующий ввод будет type = "submit", а изменение предыдущего ввода на type = "button" должно дать желаемое поведение по умолчанию.

<form>
   <input type = "text" name = "field1" /> <!-- put your cursor in this field and press Enter -->

   <input type = "button" name = "prev" value = "Previous Page" /> <!-- This is the button that will submit -->
   <input type = "submit" name = "next" value = "Next Page" /> <!-- But this is the button that I WANT to submit -->
</form>

С помощью JavaScript (здесь jQuery) вы можете отключить кнопку prev перед отправкой формы.

$('form').on('keypress', function(event) {
    if (event.which == 13) {
        $('input[name = "prev"]').prop('type', 'button');
    }
});

В первый раз, когда я столкнулся с этим, я придумал хак onclick () / JavaScript, когда варианты выбора не предшествуют / следуют, что мне до сих пор нравится из-за его простоты. Это выглядит так:

@model myApp.Models.myModel

<script type = "text/javascript">
    function doOperation(op) {
        document.getElementById("OperationId").innerText = op;
        // you could also use Ajax to reference the element.
    }
</script>

<form>
  <input type = "text" id = "TextFieldId" name = "TextField" value = "" />
  <input type = "hidden" id = "OperationId" name = "Operation" value = "" />
  <input type = "submit" name = "write" value = "Write" onclick='doOperation("Write")'/>
  <input type = "submit" name = "read" value = "Read" onclick='doOperation("Read")'/>
</form>

При нажатии любой кнопки отправки желаемая операция сохраняется в скрытом поле (которое является строковым полем, включенным в модель, с которой связана форма) и отправляет форму контроллеру, который принимает все решения. В контроллере вы просто пишете:

// Do operation according to which submit button was clicked
// based on the contents of the hidden Operation field.
if (myModel.Operation == "Read")
{
     // Do read logic
}
else if (myModel.Operation == "Write")
{
     // Do write logic
}
else
{
     // Do error logic
}

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

Если вы внимательно прочитали вопрос, там не упоминается о «нажатии» кнопки отправки, все сводится к нажатию Enter в текстовом поле и определению, какая кнопка активируется. Код, который вы предоставляете, предназначен для другой проблемы, для которой уже есть несколько хороших решений, хотя ваше тоже хорошее. У вас есть решение исходного вопроса?

Tylla 20.07.2020 01:37

Я столкнулся с этим вопросом, когда пытался найти ответ на одно и то же, только с элементами управления ASP.NET, когда выяснил, что кнопка ASP имеет свойство UseSubmitBehavior, которое позволяет вам установить, какой из них отправляет.

<asp:Button runat = "server" ID = "SumbitButton" UseSubmitBehavior = "False" Text = "Submit" />

На всякий случай кто-то ищет способ сделать это с помощью кнопки ASP.NET.

Попробуй это..!

<form>
  <input type = "text" name = "Name" />
  <!-- Enter the value -->

  <input type = "button" name = "prev" value = "Previous Page" />
  <!-- This is the button that will submit -->
  <input type = "submit" name = "next" value = "Next Page" />
  <!-- But this is the button that I WANT to submit -->
</form>

Предлагаемое вами решение сделает невозможным использование кнопки first / prev, поскольку она не отправит форму. По крайней мере, без помощи дополнительного кода Javascript.

Tylla 20.07.2020 01:45

Я решил очень похожую проблему таким образом:

  1. Если JavaScript включен (в большинстве случаев в настоящее время), тогда все кнопки отправки имеют вид «деградированный» для кнопок при загрузке страницы через JavaScript (jQuery). События нажатия на кнопку «деградированный», введенные кнопками, также обрабатываются с помощью JavaScript.

  2. Если JavaScript не включен, форма отображается в браузере с несколькими кнопками отправки. В этом случае нажатие Enter на textfield в форме отправит форму с первой кнопкой вместо предполагаемого дефолт, но, по крайней мере, форма все еще пригодна для использования: вы можете отправить с помощью кнопок предыдущий и следующий.

Рабочий пример:

<html>
    <head>
        <script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    </head>

    <body>
        <form action = "http://httpbin.org/post" method = "post">
            If JavaScript  is disabled, then you CAN submit the form
            with button1, button2 or button3.

            If you press enter on a text field, then the form is
            submitted with the first submit button.

            If JavaScript is enabled, then the submit typed buttons
            without the 'defaultSubmitButton' style are converted
            to button typed buttons.

            If you press Enter on a text field, then the form is
            submitted with the only submit button
            (the one with class defaultSubmitButton)

            If you click on any other button in the form, then the
            form is submitted with that button's value.

            <br />

            <input type = "text" name = "text1" ></input>
            <button type = "submit" name = "action" value = "button1" >button 1</button>
            <br />

            <input type = "text" name = "text2" ></input>
            <button type = "submit" name = "action" value = "button2" >button 2</button>
            <br />

            <input type = "text" name = "text3" ></input>
            <button class = "defaultSubmitButton" type = "submit" name = "action" value = "button3" >default button</button>
        </form>

        <script>
            $(document).ready(function(){

                /* Change submit typed buttons without the 'defaultSubmitButton'
                   style to button typed buttons */
                $('form button[type=submit]').not('.defaultSubmitButton').each(function(){
                    $(this).attr('type', 'button');
                });

                /* Clicking on button typed buttons results in:
                   1. Setting the form's submit button's value to
                      the clicked button's value,
                   2. Clicking on the form's submit button */
                $('form button[type=button]').click(function( event ){
                    var form = event.target.closest('form');
                    var submit = $("button[type='submit']",form).first();
                    submit.val(event.target.value);
                    submit.click();
                });
            });
        </script>
    </body>
</html>

Вы можете использовать Tabindex для решения этой проблемы. Также изменение порядка кнопок было бы более эффективным способом добиться этого.

Измените порядок кнопок и добавьте значения float, чтобы назначить им желаемое положение, которое вы хотите отображать в представлении HTML.

Вместо того, чтобы бороться с несколькими отправками, JavaScript или чем-то подобным для выполнения некоторых предыдущих / следующих вещей, альтернативой может быть использование карусели для имитации разных страниц. Делая это :

  • Вам не нужно несколько кнопок, входов или отправок для выполнения предыдущего / следующего действия, у вас есть только один input type = "submit" в одном form.
  • Значения во всей форме сохраняются до тех пор, пока форма не будет отправлена.
  • Пользователь может перейти на любую предыдущую страницу и любую следующую страницу, чтобы безупречно изменить значения.

Пример использования Bootstrap 5.0.0:

<div id = "carousel" class = "carousel slide" data-ride = "carousel">
    <form action = "index.php" method = "post" class = "carousel-inner">
        <div class = "carousel-item active">
            <input type = "text" name = "lastname" placeholder = "Lastname"/>
        </div>
        <div class = "carousel-item">
            <input type = "text" name = "firstname" placeholder = "Firstname"/>
        </div>
        <div class = "carousel-item">
            <input type = "submit" name = "submit" value = "Submit"/>
        </div>
    </form>
    <a class = "btn-secondary" href = "#carousel" role = "button" data-slide = "prev">Previous page</a>
    <a class = "btn-primary" href = "#carousel" role = "button" data-slide = "next">Next page</a>
</div>

Когда кнопка нажата мышью (и, надеюсь, прикосновением), она записывает координаты X, Y. Это не тот случай, когда он вызывается формой, эти значения обычно равны нулю.

Итак, вы можете сделать что-то подобное.

function(e) {
  const isArtificial = e.screenX === 0 && e.screenY === 0
    && e.x === 0 && e.y === 0 
    && e.clientX === 0 && e.clientY === 0;

    if (isArtificial) {
      return; // DO NOTHING
    } else {
      // OPTIONAL: Don't submit the form when clicked 
      // e.preventDefault();
      // e.stopPropagation();
    }

    // ...Natural code goes here
}

Кажется, вы перепутали ввод нескольких кнопок с вводом одного изображения.

Quentin 03.01.2021 13:58

Не совсем, ожидается, что e будет MouseEvent. Посмотрите на свойства (developer.mozilla.org/en-US/docs/Web/API/MouseEvent).

Prince Owen 04.01.2021 15:05

Если кнопка была нажата с помощью мыши, isArtificial будет ложным. Потому что такие свойства, как clientX или clientY, будут не нулевыми, а координатами мыши.

Prince Owen 04.01.2021 15:09

Я думаю, что это лучшее решение для этого. Сделайте предыдущую кнопку с type до button и добавьте новый атрибут onclick в кнопку со значением jQuery(this).attr('type','submit');.

Итак, когда пользователь нажимает кнопку «Назад», его type будет изменен на submit, и форма будет отправлена ​​с кнопкой «Назад».

<form>
  <!-- Put your cursor in this field and press Enter -->
  <input type = "text" name = "field1" />

  <!-- This is the button that will submit -->
  <input type = "button" onclick = "jQuery(this).attr('type','submit');" name = "prev" value = "Previous Page" />

  <!-- But this is the button that I WANT to submit -->
  <input type = "submit" name = "next" value = "Next Page" />
</form>

Другие вопросы по теме