рассмотрите следующую проблему:
(1) Вы присвоили встроенный обработчик события элементу DOM, например, <a id="link1" href="..." onclick=" ... ´"
>
(2) Вы также назначаете один или несколько дополнительных обработчиков событий для события onclick link1 с помощью механизма присваивания, специфичного для DOM2 или IE.
Проверенное поведение в FF3.019 и IE7: обработчик, назначенный в (1), выполняется ДО всех обработчиков, назначенных в (2), в случае щелчка. Это хорошо (так что, наверное, ничего не написано в камне ...). Но давайте на минуту положимся на это поведение.
ВОПРОС сейчас: возможно ли ОТМЕНИТЬ всплывающее окно события щелчка для обработчиков, назначенных в (2) В РАМКАХ обработчика, назначенного в (1)?
Прежде, чем вы закричите: Конечно, почему бы и нет, посмотрите следующее:
Предположим, вы присваиваете onclick = "if (ready1) возвращает true; в противном случае возвращает load (event);" на link1 и определите загрузку как
function loading(e) {
// alert("Still loading functionality - sorry, slow line perhaps...");
// no propagation
if( e.stopPropagation ) { e.stopPropagation(); }
e.cancelBubble = true;
return false; // Cancel default handling
}
в некотором теге скрипта выше. Это НЕ препятствует распространению (ни в FF3.019, ни в IE) на обработчики, назначенные в (2).
Любая подсказка приветствуется! Заранее спасибо!
Jannico
Контекст (или: зачем мне это делать?):
A) Ленивая / поздняя загрузка javascript для быстрого восстановления содержимого.
-> вы хотите сообщить пользователю, что некоторые функциональные возможности все еще загружаются (вместо простого отключения элемента пользовательского интерфейса, который не очень удобен для пользователя - почему эта кнопка отключена ???). Вы также хотите использовать минимальный javascript, уже встроенный в страницу, потому что загрузка библиотеки javascript сначала дополнительным запросом несколько противоречит цели (в противном случае вы, конечно, можете использовать один из реализованных механизмов, которые позволяют регистрировать события с гарантированной последовательностью выполнения ( который вам понадобится для B, см. ниже)
и B) вы также хотите «освободить зверей» в один «атомный» момент времени, то есть вы не хотите, чтобы вас принудительно интегрировали / меняли все обработчики, назначенные в (2), для ожидания для какого-то сигнала «теперь вам разрешено работать, потому что все загружено», вы просто хотите передать этот сигнал только заголовку цепочки обработки событий (обработчику, назначенному в (1)), который затем может просто начать распространение событие, что бы ни случилось (в противном случае возможны частичные реакции на ввод пользователя, потому что некоторые функции уже подключены, а другие нет - что потенциально хуже, чем ничего не делать;)