Если в форме имеется более одной кнопки отправки, есть ли способ узнать, какая из них запустила событие onsubmit
, не добавляя код в сами кнопки?
Изменить: Мне нужно выполнить проверку на стороне клиента, то есть с помощью JavaScript.
Если в форме имеется более одной кнопки отправки, есть ли способ узнать, какая из них запустила событие onsubmit
, не добавляя код в сами кнопки?
Изменить: Мне нужно выполнить проверку на стороне клиента, то есть с помощью JavaScript.
Событие "отправить" не запускается кнопкой, но его увольняет "форма". Быстрый тест подтверждает это:
<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), в результате чего будет запущено событие отправки. (если вы хотите знать)
Итак, лучшие варианты для вас:
Есть несколько способов, о которых я могу думать.
Вы можете использовать разные значения, и ваш ненавязчивый javascript может помочь с этим.
Одно обсуждение этого подхода (используя разные значения для каждой кнопки):
http://www.chami.com/tips/internet/042599I.html
Я предпочитаю использовать разные атрибуты name
для каждой кнопки.
Блог о том, что здесь: http://www.codetoad.com/javascript/multiple.asp
Я не следую ни одному из них, какой подход будет работать лучше всего, будет зависеть от разных факторов, например, обрабатываете ли кнопки отправки в javascript, или сервер получит форму, а затем должен выяснить что хотел пользователь.
Лично я предпочитаю использовать подход ajax, теперь, когда я просто присоединяю события к кнопкам после загрузки страницы, используя ненавязчивый javascript, а затем на основе запроса выбора пользователя к правильной функции, но это зависит о том, можно ли добавить ссылку script на страницу html.
UPDATE:
Чтобы сделать это с помощью javascript, самый простой способ - прикрепить событие нажатием кнопки, а затем посмотреть имя, чтобы решить, как с ним справиться.
В действительности форма никогда не должна быть отправлена на сервер, но вы можете обрабатывать все в фоновом режиме, завершая параметры (параметры) и отправляя их на сервер, и дайте знать пользователям результаты.
Имеет ли прослушиватель событий на каждой кнопке количество добавляемого кода? В противном случае нет способа увидеть, какая кнопка запускает событие отправки, если вы не хотите опуститься и не испачкаться, и вычислить положение мыши во время события и сравнить его с позициями кнопок.
В противном случае следующей лучшей задачей было бы назначить обработчик событий для события нажатия кнопки и назначить имя этой кнопки переменной, которую вы можете проверить в событии отправки формы.
Извините, что разогрел эту очень старую нить. На этот вопрос не был дан ответ, но здесь были рассмотрены только подходы к практическим обходным решениям.
Но объект события выполняет, но не несет информацию о том, какой объект его инициировал. В обработчике b4submit (e) вы можете получить кнопку отправки следующим образом:
function b4submit(e) {
var but = e.originalEvent.explicitOriginalTarget;
...
}
И но это HTML-объект со всеми атрибутами, которые вы ему назначили, такими как имя, идентификатор, значение и т.д.
Я столкнулся с этим после некоторой отладки, и я подумал, что это может быть более интересным как чистое решение для этой проблемы.