Я не эксперт по mootools, но я думаю, что вам нужно вызывать addEvent
и removeEvent
с точно такой же функцией, а не с двумя функциями, которые делают одно и то же. Я предполагаю, что mootools не может удалить прослушиватель кликов, потому что он ищет функцию, которая фактически не была зарегистрирована. То есть она ищет функцию A, но зарегистрированная функция - это функция B. Они делают то же самое, но они не являются одной и той же функцией.
В результате прослушиватель щелчков в документе никогда не удаляется, а вместо этого переключает элемент при каждом щелчке - и каждый раз добавляется новая функция переключения. Если щелкнуть несколько раз, щелчок в любом месте документа приводит к тому, что элемент переключается назад и вперед X раз. Если X нечетное число, оно, кажется, работает как ожидалось. Если это даже, это не будет иметь никакого видимого эффекта.
Попробуйте это
function toggleTooltip(id) {
var e = document.id(id);
if( !e.toggleCallback ) {
e.toggleCallback = function() { toggleTooltip(id); };
}
if(e.style.display=='block') {
e.style.display='none';
document.removeEvent('click', e.toggleCallback);
} else {
e.style.display='block';
document.addEvent('click', e.toggleCallback);
}
}
Я бы также посоветовал вам не использовать атрибут onclick
, так как вы уже используете mootools. Вместо этого настройте прослушиватель событий на запуск при загрузке документа. Затем используйте это, чтобы найти элементы, которые нужно переключить, и установите все там.
Редактировать: Вот что я имею в виду: http://jsfiddle.net/au32j/1/