Есть ли какой-либо способ в JavaScript или jQuery обнаружить, когда событие закончено, распространяя DOM? У меня есть обработчик jQuery click, который привязывается (с целевым «html») на клик, а сам клик, который добавляет его, запускает его, когда он пузырится до цели. Я хочу отложить привязку обработчика до тех пор, пока не будет выполнено распространение. Я слышал event.stopPropagation() - это рискованный бизнес, поэтому я бы предпочел не использовать его.Может ли JavaScript или jQuery обнаруживать, когда распространение события завершено?
Вот мой код. # title-editable является привязным тегом. vclick - это событие, определенное jQuery Mobile. Я получаю оба консольных журнала одним щелчком мыши на # title-editable.
$("#title-editable").on("vclick", function(event){
event.preventDefault();
console.log("First handler fired.");
/* Would like to detect completion of event propagation here
and only execute the next statement after that. */
$("html").one("vclick",function(){
console.log("Second handler fired.");
});
});
Редактировать: Я думаю, у меня есть обходное решение. Вместо .one для внутреннего события, я использую. Так что событие не отсоединяется при первом запуске. Я проверяю цель события click и выполняю только изменения для внутреннего события и отделяю внутреннее событие, если цель не является # прав на редактирование.
$("#title-editable").on("vclick", function(event){
event.preventDefault();
console.log("First handler fired.");
$("html").on("vclick",function(event2){
console.log("Second handler fired.");
if(!$(event2.target).closest("#title-editable").length){
console.log("Execute changes here.");
$("html").off("vclick");
}
});
Это не имеет никакого смысла вообще? Скорее всего, это проблема X/Y, если кто-нибудь может это понять? – adeneo
Обычно «тело» является пунктом назначения пузырька события. Но если вы обрабатываете событие там, что, если какой-то код вызывает 'stopPropagation()' где-то под деревом? –
Можете ли вы указать на то, что не имеет смысла? Основная вещь, которую я пытаюсь сделать, - это щелкнуть событие, прикрепленное к документу, но не уволиться, когда щелкнуто редактирование # title-editable. Есть лучший способ сделать это? –