добавить или удалить функции из обработчика событий onSubmit?
-
12-11-2019 - |
Вопрос
У меня есть следующий код:
function showAddrBox() {
var prompt = document.getElementById('addr_prompt');
prompt.style.display = 'block';
document.generic_form.address.style.display = 'block';
document.generic_form.onsubmit = validateAddrForm;
}
function hideAddrBox() {
var prompt = document.getElementById('addr_prompt');
prompt.style.display = 'none';
document.generic_form.address.style.display = 'none';
document.generic_form.onsubmit = null;
}
Проблема в том, что иногда к onSubmit прикрепляются дополнительные функции, которые я хочу сохранить.Я хочу иметь возможность добавлять и удалять отдельные функции из события onSubmit, а не просто устанавливать их с помощью «onsubmit =».Другими словами, мне нужен способ выполнить что-то вроде этого:
document.form.onsubmit += function;
document.form.onsubmit -= function;
Есть идеи?
Решение
Используйте element.addEventListener("eventName", callbackFunction, false)
и element.removeEventListener("eventName", callbackFunction)
.
Откуда EventName - это имя обработчика без «на».Так что onsUbmit становится отправным.
Для документирования двух функций см.:
Другие советы
В режиме Quirksmode есть замечательная статья о расширенной регистрации на мероприятия.
Краткая форма:Вы можете связать несколько событий, используя addEventListener
(attachEvent
в старых версиях IE).
if (someform.addEventListener) {
someform.addEventListener('submit', somefunc, false);
} else {
someform.attachEvent('onsubmit', somefunc);
}
Чтобы удалить их, вы можете использовать removeEventListener
и detachEvent
соответственно.
Довольно быстро вы начнете раздражаться от постоянного набора текста. addEventListener
и attachEvent
, и вы можете рассмотреть возможность создания общего кода для привязки событий за вас.К счастью, другие программисты придерживались той же идеи, и существует множество библиотек, которые элегантно управляют событиями. jQuery
обычно является предпочтительной библиотекой, поскольку привязка события так же проста, как:
$('#formid').submit(somefunc);
общий метод привязки событий:
$('#formid').on('submit', somefunc);
для отвязки вы можете использовать:
$('#formid').off('submit', somefunc);
Хотя все это хорошо описано в API jQuery.
То, что у меня будет делать, есть одна функция OnsUbmit в форме, которые образуют оркестраты остальных функций, выполняет логику на том, что делать, когда.В конце этого выполнения функции вы можете вернуть True, если вы хотите продолжить с помощью отправки или возврата FALSE, если вы этого не сделаете.
Вы можете упомянуть два или более функций для формы, как ниже.
<form name="formaname" onsubmit="function1(),function2()">