2013-07-12 3 views
0

В моем HTML я получил форму без слушатель onsubmit события:Где добавить onsubmit к форме в Javascript

<form action="contact.php" method="post" id="contact"> 
    ... 
    <input type="submit" value="Send" /> 
</form> 

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

window.onload = function() { 
    function validate() { 
     return window.confirm("Confirm"); 
    } 
    var form = document.getElementById("contact"); 
    form.addEventListener("submit", validate); 
} 

В то время как слушатель события выполняется, если я иду по вышеизложенному подходу форма всегда выложили! Однако, если я делаю функцию validate() глобальной и использую onsubmit="return validate();" в теге <form>, тогда форма представляется только условно, как и ожидалось.

Почему это не работает, добавив функцию validate(), как указано выше? Кажется, что потерянное значение false теряется?

ответ

3

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

Для вашего случая использования, вам нужно захватить объект события:

function validate(ev) { 

Тогда вы можете предотвратить действие по умолчанию на нем:

if (!confirm('Confirm')) { 
    ev.preventDefault(); 
} 
+0

Хм ... Я добавил 'эв. preventDefault(); 'и он работает отлично. Должен ли я все же вернуть false? – Jens

+0

Нет. Вы просто вызываете методы для объекта события. – Quentin

+0

Спасибо Квентин. Еще один вопрос: почему работает 'return false', когда я прикрепляю его непосредственно к'

', и не так, когда я просматриваю 'addEventListener()'. Различные способы доставки/проверки событий? – Jens

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