Как узнать, какая кнопка отправки нажала событие onsubmit

Если в форме имеется более одной кнопки отправки, есть ли способ узнать, какая из них запустила событие onsubmit, не добавляя код в сами кнопки?


Изменить: Мне нужно выполнить проверку на стороне клиента, то есть с помощью JavaScript.

Ответ 1

Событие "отправить" не запускается кнопкой, но его увольняет "форма". Быстрый тест подтверждает это:

  <form id="myform">
     <input id="email" type="text" value="1st Email" />
     <input id="action1" type="submit" value="Action 1" />
     <input id="action2" type="submit" value="Action 2" />
  </form>

  <script type="text/javascript">

     document.getElementById("myform").onsubmit = function(evt)  {
        var event = evt || window.event;
        alert(event.target.id); // myform
        alert(event.explicitOriginalTarget.id); // action2 (if action2 was clicked)
                                                // but only works in firefox!
     }

  </script>

Хотя в firefox вы можете использовать свойство event.explicitOriginalTarget для события, чтобы получить введенный вход (submit), в результате чего будет запущено событие отправки. (если вы хотите знать)

Итак, лучшие варианты для вас:

  • Иметь другое значение для кнопок отправки OR
  • Имейте эти обычные кнопки и обработчики кликов для них через javascript.

Ответ 2

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

Вы можете использовать разные значения, и ваш ненавязчивый javascript может помочь с этим.

Одно обсуждение этого подхода (используя разные значения для каждой кнопки):

http://www.chami.com/tips/internet/042599I.html

Я предпочитаю использовать разные атрибуты name для каждой кнопки.

Блог о том, что здесь: http://www.codetoad.com/javascript/multiple.asp

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

Лично я предпочитаю использовать подход ajax, теперь, когда я просто присоединяю события к кнопкам после загрузки страницы, используя ненавязчивый javascript, а затем на основе запроса выбора пользователя к правильной функции, но это зависит о том, можно ли добавить ссылку script на страницу html.

UPDATE:

Чтобы сделать это с помощью javascript, самый простой способ - прикрепить событие нажатием кнопки, а затем посмотреть имя, чтобы решить, как с ним справиться.

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

Ответ 3

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

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

Ответ 4

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

Но объект события выполняет, но не несет информацию о том, какой объект его инициировал. В обработчике b4submit (e) вы можете получить кнопку отправки следующим образом:

function b4submit(e) {
    var but = e.originalEvent.explicitOriginalTarget;
    ...
}

И но это HTML-объект со всеми атрибутами, которые вы ему назначили, такими как имя, идентификатор, значение и т.д.

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