Переключение обработчиков кликов в 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()
в каждом обработчике, но это имеет отрицательный побочный эффект отмены любых других обработчиков щелчков, которые могли быть присоединены независимо.
Есть ли способ безопасно и последовательно переключаться между двумя обработчиками щелчков, не останавливая распространение события щелчка?