1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // index all links on the current page var linkindex = document.getElementsByTagName('a'), linkindexlength = linkindex.length; // loop trough links on page and change onclick behaviour for( i = 0; i < linkindexlength; i++ ) { linkindex[i].onclick = jsredirect(i); } // change default link behaviour to js redirect function jsredirect(link) { window.location = linkindex[link].getAttribute('href'); return false; } |
En wat gebeurd er als je van de onclick een functie maakt?quote:Op zaterdag 28 juni 2014 13:29 schreef n8n het volgende:
Hallo script magistralen, heb dus ene js met een loop die bij onclick (is de bedoeling) een functie aanroept. Het script zegt alleen fuck die onclick ik doe het gewoon bij elke link in de loop.
De JavaScript:
[ code verwijderd ]
Wat er dus gebeurd is dat er een oneindige loop van automatische redirects komt (wat niet de bedoeling is). Weet iemand waarom het niet onclick gebeurd maar laten we zeggen continue met magische krachten?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // index all links on the current page var linkindex = document.getElementsByTagName('a'), linkindexlength = linkindex.length; // loop trough links on page and change onclick behaviour for( i = 0; i < linkindexlength; i++ ) { linkindex[i].onclick = function(){ jsredirect(i); }; } // change default link behaviour to js redirect function jsredirect(link) { window.location = linkindex[link].getAttribute('href'); return false; } |
dat zegt jslint dat ik geen functie in een loop mag zetten maar het werkt wel Met jouw code vind ik dat trouwens geen bezwaar want de (anonieme) functie doet verder niks dan de echte functie aanroepen. Beter. Thanks a bunchquote:Op zaterdag 28 juni 2014 13:34 schreef boem-dikkie het volgende:
[..]
En wat gebeurd er als je van de onclick een functie maakt?
onclick = function(){
redirect();
}
Het probleem is dat onclick de functie zelf moet zijn (bv onclick = jsredirect) en niet de output van de functie (zoals je krijgt bij onclick = jsredirect()).quote:Op zaterdag 28 juni 2014 13:35 schreef n8n het volgende:
[..]
dat zegt jslint dat ik geen functie in een loop mag zetten maar het werkt wel
Ah oke, ik dacht nu (wat ik eerst had) dat het sowieso zou 'wachten' op een click, ogenschijnlijk vreemde manier om duidelijk te maken dat het niet werkt zoals bedoeldquote:Op zaterdag 28 juni 2014 13:36 schreef Tijn het volgende:
[..]
Het probleem is dat onclick de functie zelf moet zijn (bv onclick = jsredirect) en niet de output van de functie (zoals je krijgt bij onclick = jsredirect()).
Wat je eigenlijk deed was in een loop de functie jsredirect aanroepen (en daarmee dus ook direct de window.location veranderen) en vervolgens de onclick-handler op "false" zetten (want dat is de output van de functie).quote:Op zaterdag 28 juni 2014 13:38 schreef n8n het volgende:
[..]
Ah oke, ik dacht nu (wat ik eerst had) dat het sowieso zou 'wachten' op een click, ogenschijnlijk vreemde manier om duidelijk te maken dat het niet werkt zoals bedoeld
chill dankjewel, het automatisch redirecten is weg maar de functie is ook kapot. Ga er later even naar kijken, moet nu een andere klus afhandelen. Mehquote:Op zaterdag 28 juni 2014 13:44 schreef Tijn het volgende:
Deze pagina geeft meer uitleg + een werkbare oplossing trouwens: http://jslinterrors.com/dont-make-functions-within-a-loop
dan snap ik weer niet hoe de functie weet welk argument gebruikt wordt (inhoud haakjes) maar ik ga eerst je artikel lezen voordat ik verder vraag. Wel prettig weer wat leven in dit topicquote:Op zaterdag 28 juni 2014 13:40 schreef Tijn het volgende:
[..]
Wat je eigenlijk deed was in een loop de functie jsredirect aanroepen (en daarmee dus ook direct de window.location veranderen) en vervolgens de onclick-handler op "false" zetten (want dat is de output van de functie).
Je wil niet dat de functie wordt uitgevoerd in de loop, je wil alleen dat bij een onclick gelijk is aan die functie. Daarom laat je de haakjes weg.
Ja, dat is precies waar dat artikeltje over gaat.quote:Op zaterdag 28 juni 2014 13:52 schreef n8n het volgende:
[..]
dan snap ik weer niet hoe de functie weet welk argument gebruikt wordt (inhoud haakjes) maar ik ga eerst je artikel lezen voordat ik verder vraag. Wel prettig weer wat leven in dit topic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // index all links on the current page var linkindex = document.getElementsByTagName('a'), linkindexlength = linkindex.length, i; // change default link behaviour to js redirect function jsredirect(index) { "use strict"; window.location = linkindex[index].getAttribute('href'); return false; } // return handler function makeHandler(index) { "use strict"; return function () { jsredirect(index); }; } // loop trough links on page and change onclick behaviour for (i = 0; i < linkindexlength; i += 1) { linkindex[i].onclick = makeHandler(i); } |
Dit zou eventueel ook heel eenvoudig met jQuery kunnen.quote:Op zaterdag 28 juni 2014 13:29 schreef n8n het volgende:
Hallo script magistralen, heb dus ene js met een loop die bij onclick (is de bedoeling) een functie aanroept. Het script zegt alleen fuck die onclick ik doe het gewoon bij elke link in de loop.
De JavaScript:
[ code verwijderd ]
Wat er dus gebeurd is dat er een oneindige loop van automatische redirects komt (wat niet de bedoeling is). Weet iemand waarom het niet onclick gebeurd maar laten we zeggen continue met magische krachten?
1 2 3 4 5 6 7 | <?php $('a').click(function(e) { e.preventDefault(); //jouw extra functie. window.location = $(this).attr('href'); }); ?> |
Misschien een iOS home screen web app? Dan opent een normale link in Safari, terwijl een window.location change binnen de app blijft.quote:Op zaterdag 28 juni 2014 23:29 schreef PimD het volgende:
Maar... waarom zou je het default browser gedrag afvangen en dan de window.location via Javascript zetten? :-D
Lol inderdaad de enige reden .quote:Op zaterdag 28 juni 2014 23:54 schreef Tijn het volgende:
[..]
Misschien een iOS home screen web app? Dan opent een normale link in Safari, terwijl een window.location change binnen de app blijft.
Precies dat jaquote:Op zaterdag 28 juni 2014 23:54 schreef Tijn het volgende:
[..]
Misschien een iOS home screen web app? Dan opent een normale link in Safari, terwijl een window.location change binnen de app blijft.
Je kunt het trouwens simpeler doen:quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var a, i; function linkHandler(link) { "use strict"; return function () { window.location = link; return false; }; } a = document.getElementsByTagName("a"); for (i = 0; i < a.length; i += 1) { a[i].onclick = linkHandler(a[i].getAttribute("href")); } |
Ook vrij eenvoudig met vanilla JS zoals bovenstaande post laat zien.quote:Op zaterdag 28 juni 2014 23:18 schreef esv7 het volgende:
[..]
Dit zou eventueel ook heel eenvoudig met jQuery kunnen.
[ code verwijderd ]
Wil je de rijen perse in hun eigen div hebben? Als je alle 9 sub-divs in één div zet zouden ze netjes op moeten schuiven als je er een paar divs tussen uit haalt.quote:Op zondag 29 juni 2014 13:19 schreef tweemeter het volgende:
Ik zit even om te prutsen met een website en ik heb met jquery een sorteer functie gemaakt voor een aantal div's met lijsten er in.
Ik wil nu dat als je een selectie maakt van twee dingen en het staat niet in de lijst dat deze hele lijst en div weg wordt gehaald en dat de rest doorschuift, is dat mogelijk? Zie voorbeeld.
Begin
[ afbeelding ]
Na selectie blijkt er geen overeenkomst te zijn in div1b, div2a en div2b, deze moeten weg.
[ afbeelding ]
Dit gebeurd er op dit moment:
[ afbeelding ]
En ik wil dit voor elkaar krijgen:
[ afbeelding ]
Alvast bedankt
Nouja ik maak op dit moment gebruik van bootstrap die de rijen in divs opbouwt. Als ik de rij-divs weghaalt wordt het een grote chaos.quote:Op zondag 29 juni 2014 15:37 schreef BrainOverfloW het volgende:
[..]
Wil je de rijen perse in hun eigen div hebben? Als je alle 9 sub-divs in één div zet zouden ze netjes op moeten schuiven als je er een paar divs tussen uit haalt.
Anders moet je denk ik kijken naar een oplossing die na het verwijderen, uit de overgebleven div's, nieuwe rijen opbouwt.
heb nu dit (JS):quote:Op zondag 29 juni 2014 11:47 schreef Tijn het volgende:
[..]
Je kunt het trouwens simpeler doen:
[ code verwijderd ]
Sweet heb een rel="external" toegevoegd aan externe links en dit werkt, de links worden alleen niet geopend met window.open, zelfs niet als ik pop-ups niet blokkeer. dev.console logt ze wel (is een console.log() maar dan alleen als dev.mode op true staat).quote:// redirect
// add jsredirect onclick function to all links on page
function approuter() { 'use strict';
for (i = 0; i < linkindexlength; i++) {
linkindex[i].onclick = jsredirect(linkindex[i]);
}
}
// add javascript redirect to all links on page, opens external links in new window
function jsredirect(link) { 'use strict';
var href = link.getAttribute('href'),
rel = link.getAttribute('rel');
return function () {
if (rel === 'external' || rel === 'test') {
window.open = href; dev.console('external link' + href);
} else {
window.location = href; dev.console('internal link' + href);
}
return false;
};
}
is toch dé manier om dit probleem op te lossen.quote:Op zondag 29 juni 2014 15:40 schreef tweemeter het volgende:
[..]
Nouja ik maak op dit moment gebruik van bootstrap die de rijen in divs opbouwt. Als ik de rij-divs weghaalt wordt het een grote chaos.
Kun je een snel voorbeeld van je code maken in JSfiddle?quote:Op zondag 29 juni 2014 15:40 schreef tweemeter het volgende:
[..]
Nouja ik maak op dit moment gebruik van bootstrap die de rijen in divs opbouwt. Als ik de rij-divs weghaalt wordt het een grote chaos.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |