jQuery "късни" събития

StormBreaker

Registered
Има ли начин с jquery или стандартен JS да задам на една функция да се изпълни задължително след всички други хендлъри за дадено събитие :idea:
 
Не мисля, че те разбрах правилно, но това е според мен:
Код:
<a href="..." onClick="func1();func2();func3();">...</a>
Обясни го малко по-добре :)
 
Имам една функция, която трябва да се изпълни последна при клик например и да проверява дали някоя от предните изпълнени не е върнала false. Иначе ако се изпълни първа няма как да провери някоя от другите защото те още не са извикани.

Проблема е, че нямам никакъв начин да разбера кои са тези другите функции.
 
Пробвай така:
Код:
<script>
var firstFunc = false;
var secondFunc = false;

function func1(){
...
if(success или нещо от сорта){
firstFunc = true; //при положителен изход, придаваме true на променливата firstFunc 
}
}

function func2(){
...
if(success или нещо от сорта){
secondFunc = true; //при положителен изход, придаваме true на променливата secondFunc 
}
}

function lastFunc(){
if( firstFunc && secondFunc ) //тук проверяваш дали първата и втората функция са върнали true 
alert('Success!');
else
alert('DAMN!');
}
</script>
:)
 
StormBreaker каза:
Проблема е, че нямам никакъв начин да разбера кои са тези другите функции.
:?
аа, извинявай, не бях обърнал внимание на това...
Поне знаеш ли колко на брой функции се изпълнявата преди тази контролната ?
 
F1r3Fl3x каза:
StormBreaker каза:
Проблема е, че нямам никакъв начин да разбера кои са тези другите функции.
:?
аа, извинявай, не бях обърнал внимание на това...
Поне знаеш ли колко на брой функции се изпълнявата преди тази контролната ?

не. :?
 
Интересна ситуация :D
Можеш ли да дадеш някакъв код или направо демо, защото просто не мога да разбера какво искаш да направиш
:?
 
Трябва да си сигурен, че я добавяш последна като handler за това събитие. Или може да ползваш една друга техника нарича се подскачане на събитетията. Например ако натиснеш с мишката върху <a> таг, който е child на <div> таг първо ще се изпълни събитие click за линка, после за div-a, после за неговия parent и така до body. Номера тука е, че имаш едно свойство на event обекта (аргумента, кйто приема handler-а), което съдържа елемента активирал подскачането тоест ако натиснеш <a> във всеки един от event handler-ите на неговите "родители" това свойство съдържа елемента <a>, а тези handler-и винаги ще се изпълнят след всички handler-и на <a>. Ако ползваш jQuery това свойство е event.target:

var elm = $( "#asdf" )[0];

$( elm.parentNode ).click(function(e){
if( e.target == elm ){
// do your stuff
}
});


$(elm).click(function(e){ /*1*/})
.click(function(e){/*2*/})
.click(function(e){/*3*/});
 
I_V_O каза:
Трябва да си сигурен, че я добавяш последна като handler за това събитие. Или може да ползваш една друга техника нарича се подскачане на събитетията. Например ако натиснеш с мишката върху <a> таг, който е child на <div> таг първо ще се изпълни събитие click за линка, после за div-a, после за неговия parent и така до body. Номера тука е, че имаш едно свойство на event обекта (аргумента, кйто приема handler-а), което съдържа елемента активирал подскачането тоест ако натиснеш <a> във всеки един от event handler-ите на неговите "родители" това свойство съдържа елемента <a>, а тези handler-и винаги ще се изпълнят след всички handler-и на <a>. Ако ползваш jQuery това свойство е event.target:

var elm = $( "#asdf" )[0];

$( elm.parentNode ).click(function(e){
if( e.target == elm ){
// do your stuff
}
});


$(elm).click(function(e){ /*1*/})
.click(function(e){/*2*/})
.click(function(e){/*3*/});

Интересно решение :) Благодаря. :) Това за bubblinga го знаех но не съм се сетил така да го използвам.
 

Back
Горе