добавить или вычесть функции из обработчика события onSubmit? - PullRequest
3 голосов
/ 24 января 2012

У меня есть следующий код:

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;

Есть идеи?

Ответы [ 4 ]

7 голосов
/ 24 января 2012

В 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);

Хотя все это хорошо документировано в jQuery API .

6 голосов
/ 24 января 2012

Используйте element.addEventListener("eventName", callbackFunction, false) и element.removeEventListener("eventName", callbackFunction).

Где eventName - это имя обработчика без 'on'. Таким образом, он становится подчиненным.

Для документации двух функций, см .:

0 голосов
/ 24 января 2012

вы можете упомянуть две или более функций для формы, как показано ниже.

<form name="formaname" onsubmit="function1(),function2()">

больше на подаче

0 голосов
/ 24 января 2012

То, что я хотел бы сделать, это иметь одну функцию onSubmit прямо в форме, которая управляет остальными функциями, выполняет логику о том, что делать, когда.В конце выполнения этой функции вы можете вернуть true, если вы хотите продолжить отправку, или вернуть false, если вы этого не сделаете.

...