Переключение обработчиков кликов в Javascript

У меня есть кнопка HTML, к которой я прикрепляю событие, используя jQuerybind(), вот так:

$('#mybutton').bind('click', myFirstHandlerFunction);

ВmyFirstHandlerFunctionЯ хотел бы, чтобы этот обработчик заменил себя новым обработчиком,mySecondHandlerFunction, нравится:

function myFirstHandlerFunction(e) {
    $(this).unbind('click', myFirstHandlerFunction).bind('click', mySecondHandlerFunction);
}

Во втором клике обработчик,mySecondHandlerFunctionЯ бы хотел вернуть кнопку в исходное состояние: отменить привязкуmySecondHandlerFunction обработчик и подключите оригинальный обработчик,myFirstHandlerFunction, вот так:

function mySecondHandlerFunction(e) {
    $(this).unbind('click', mySecondHandlerFunction).bind('click', myFirstHandlerFunction);
}

Это прекрасно работает, за исключением одной маленькой детали: поскольку событие click еще не распространяется через каждый из обработчиков нажатия кнопки, событие click передается в следующий обработчик нажатия кнопки, который оказывается обработчиком, который был только что связан в предыдущий обработчик. Конечный результатmySecondHandlerFunction выполняется сразу послеmyFirstHandlerFunction выполнен.

Эту проблему легко решить, позвонивe.stopPropagation() в каждом обработчике, но это имеет отрицательный побочный эффект отмены любых других обработчиков щелчков, которые могли быть присоединены независимо.

Есть ли способ безопасно и последовательно переключаться между двумя обработчиками щелчков, не останавливая распространение события щелчка?

Ответы на вопрос(6)

Ваш ответ на вопрос