[jQuery] 1 functie aanroepen met meerdere triggers

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik heb een functie die wat zaken doet, maar ik wil deze aanroepen met meerdere triggers. Hoe ik deze precies kan combineren weet ik niet precies. De documentatie noemt alleen het combineren van bv:

JavaScript:
1
$("a").bind("focus mouseover", fn);


Alleen ik wil de volgende combineren:

JavaScript:
1
2
3
4
5
$('#tabs').bind('tabsselect', function(event, ui) {

//  
            
});


en

JavaScript:
1
2
3
4
5
$('.next-tab').click(function() {

//  
            
});


Enig idee hoe dit te doen is? de code in een functie zetten en vanaf beide die functie aanroepen ipv een anonieme functie?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

ViNyL schreef op dinsdag 30 juni 2009 @ 13:12:
Enig idee hoe dit te doen is? de code in een functie zetten en vanaf beide die functie aanroepen ipv een anonieme functie?
Ehh... ja...

Maar neem aan dat je dat zelf ook al geprobeerd had dan als dat je idee was :?

Acties:
  • 0 Henk 'm!

  • aequitas
  • Registratie: Oktober 2001
  • Laatst online: 19-09 08:56
de code in een functie zetten en vanaf beide die functie aanroepen ipv een anonieme functie?
lijkt mij ook de meest voor de hand liggende optie.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
aequitas schreef op dinsdag 30 juni 2009 @ 13:39:
[...]


lijkt mij ook de meest voor de hand liggende optie.
Nou je kan ook triggers combineren ipv dus een functie apart schrijven. Dat dit mogelijk is weet ik.. alleen hoe je het combineert weet ik niet :)

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Je kunt geen triggers combineren van verschillende elementen. Daarvoor zul je losse functies moeten gebruiken.

Let er overigens wel op dat de twee callbacks die je wilt combineren andere argumenten hanteren. De eerste is een jQuery UI handler, de andere een standaard event handler.

[ Voor 44% gewijzigd door Bosmonster op 30-06-2009 13:49 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ja, het wordt denk ik nog lastig om:

code:
1
2
3
4
5
6
7
$('#tabs').bind('tabsselect', function(event, ui) {

//    
            
});

naar een functie te verwijzen denk ik

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

@ Hierboven: eigelijk niet , gewoon op regel 3 dit invoegen:

JavaScript:
1
myHandler(event, ui);


Maar ik denk dat TS dit zoekt:

JavaScript:
1
2
3
4
var myHandlerDelegate = function myHandler(event, ui)
{
   //blah
}

en dan kan hij dit doen:
JavaScript:
1
2
$("#tabs").bind("tabsselect", myHandlerDelegate);
$("a").bind("focus mouseover", myHandlerDelegate);

Het is niet omdat 1 van de 2 een verkeerd aantal argumenten meestuurt dat JS daarvan moeilijk gaat doen hoor :)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Snake schreef op dinsdag 30 juni 2009 @ 13:56:
@ Hierboven: eigelijk niet , gewoon op regel 3 dit invoegen:

JavaScript:
1
myHandler(event, ui);


Maar ik denk dat TS dit zoekt:

JavaScript:
1
2
3
4
var myHandlerDelegate = function myHandler(event, ui)
{
   //blah
}

en dan kan hij dit doen:
JavaScript:
1
2
$("#tabs").bind("tabsselect", myHandlerDelegate);
$("a").bind("focus mouseover", myHandlerDelegate);

Het is niet omdat 1 van de 2 een verkeerd aantal argumenten meestuurt dat JS daarvan moeilijk gaat doen hoor :)
Dat is de truc inderdaad! Kijk weer wat geleerd. Dat kan je dus op deze manier oplossen...!

* ViNyL komt nog achter een vreemd probleem.

Nu ik dit ertussen heb geplakt kan ik op mijn laatste tab de terug knop ineens niet meer gebruiken :s

[ Voor 10% gewijzigd door ViNyL op 30-06-2009 14:24 ]


Acties:
  • 0 Henk 'm!

  • aequitas
  • Registratie: Oktober 2001
  • Laatst online: 19-09 08:56
JavaScript:
1
2
3
4
var myHandlerDelegate = function myHandler(event, ui)
{
   //blah
}
Waarom een delegate gebruiken?

Ja kan toch oko gewoon de functie naam gebruiken en dan:
JavaScript:
1
$("#tabs").bind("tabsselect", myHandler(event,ui));
doen?

Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
aequitas schreef op dinsdag 30 juni 2009 @ 14:32:
[...]

Waarom een delegate gebruiken?

Ja kan toch oko gewoon de functie naam gebruiken en dan:

[...]


doen?
Nee, dat gaat niet lukken omdat je nu de functie aanroept en dus de output van die functie meegeeft.

Je kunt wel het volgende doen:
JavaScript:
1
2
3
4
function myHandler(event, ui)
{
   //blah
}

JavaScript:
1
2
$("#tabs").bind("tabsselect", myHandler);
$("a").bind("focus mouseover", myHandler);

Acties:
  • 0 Henk 'm!

  • aequitas
  • Registratie: Oktober 2001
  • Laatst online: 19-09 08:56
owja dat is waar, dan snap ik nog steeds niet waarom die delegate nodig is.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Het probleem heb ik ook opgelost.

De functie die uitgevoerd wordt is validatie code.

Je komt op het derde tab, maar daar staan geen form velden. Omdat ik met:
JavaScript:
1
$("#tabs").bind("tabsselect", myHandler); 


Een functie bind waarbij "tabfields" true moet zijn en dat niet is als je op de vorige knop of tab drukt, denkt de functie dat de velden niet kloppen.

Door in mijn validatie even tab3 op true te zetten werkt het naar behoren!

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

aequitas schreef op dinsdag 30 juni 2009 @ 14:54:
[...]

owja dat is waar, dan snap ik nog steeds niet waarom die delegate nodig is.
Die is in dit geval ook niet nodig.
Pagina: 1