Как я могу использовать addEventListener (), чтобы назначить обработчик для кнопки «Отправить» в HTML-форме, аналогично назначению атрибута кнопки «onclick», без запуска поведения формы по умолчанию (*)?
У меня нет проблем с назначением пользовательской функции атрибуту «onclick» кнопки «Отправить». Пользовательская функция выполняет множество шагов, затем создает объект запроса Ajax и использует его для отправки данных на сервер. Поведение по умолчанию submit () не запускается.
submitButton.onclick = function() {
mySubmit();
return false;
};
function mySubmit() {
//do stuff
notTheDefaultUrl = generateNonStandardUrl();
request = GetStandardAjaxRequestThingamabob();
request.open("POST", notTheDefaultUrl, true);
request.onreadystatechange = myHandler;
request.send(formData);
return false;
}
Но с помощью addEventListener () браузер отправляет запрос дважды - один раз под объектом запроса Ajax и снова с поведением submit () HTML-формы по умолчанию. (Я могу сказать b / c, что функция mySubmit отправляет данные по другому URL-адресу, чем по умолчанию - но в журналах сервера появляются как URL-адрес по умолчанию, так и URL-адрес Ajax.)
var func = window['mySubmit'];
submitButton.addEventListener('click', func, false);
Мне известно, что функция, назначенная кнопке, должна возвращать значение false, чтобы не вызывать поведение по умолчанию submit (). Я думал, что mySubmit () сделал это, и я попытался написать функцию, переданную через addEventListener, чтобы возвращать false более явно (вместо 'func', 'function () {mySubmit (); return false}'), но эти задачи тоже не работает.
Так как мне это сделать?
UPDATE
Комментарии к Peter's подняли некоторые проблемы совместимости браузера; также IE не поддерживает addEventListener (). Этот код обращается к этим. Я тестировал его в Firefox и IE 8.
function func( event ) {
if ( event.preventDefault ) { event.preventDefault()};
event.returnValue = false;
// do whatever
}
if (submitButton.addEventListener) {
submitButton.addEventListener('click', func, false);
}
else {
submitButton.attachEvent('onclick', func);
}
Извиняюсь за грязное форматирование новичка.