2010-08-21 9 views
8

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


Edit: мне нужно сделать проверку на стороне клиента, то есть с помощью JavaScript.

ответ

5

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

<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 собственность на события, чтобы получить вход (представить), что была нажата в результате чего отправить событие уволят. (Если вы хотите знать)

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

  • Есть другое значение вашей кнопки отправки ИЛИ
  • Есть те, как обычные кнопки и нажмите обработчик для них с помощью JavaScript.
+0

Спасибо. Я думал о обработчиках onclick. Кажется, нет чистого пути (по крайней мере, не для кросс-браузера) – GetFree

+0

Я действительно удивлен, что эта функциональность доступна, но, пройдя этот вопрос (и несколько похожих), похоже, что просто нет. Ламе. – MandM

1

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

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

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

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

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

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

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

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

UPDATE:

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

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

+0

Да, разные названия - это путь. Основание проверки значений концептуально неверно, поскольку эти значения являются частью графического интерфейса. – GetFree

1

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

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

+1

Я боялся этого. Какой позор. – GetFree

1

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

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

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

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

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

+0

В принятом ответе уже упоминается 'explicitOriginalTarget'. Это свойство, специфичное для мозиллы. – GetFree

 Смежные вопросы

  • Нет связанных вопросов^_^