Door
patrick G
op 23-02-2014 20:10
gewijzigd op 23-02-2014 20:15
2.027 views
Om mijn menu uit te klappen gebruik ik dit stuk script
<script>
(function($){
//cache nav
var nav = $("#topNav");
//add indicators and hovers to submenu parents
nav.find("li").each(function() {
if ($(this).find("ul").length > 0) {
$("<span>").text("").appendTo($(this).children(":first"));
//show subnav on hover
$(this).mouseenter(function() {
$(this).find("ul").stop(true, true).slideDown();
});
//hide submenus on exit
$(this).mouseleave(function() {
$(this).find("ul").stop(true, true).slideUp();
});
}
});
})(jQuery);
</script>
Dat werkt prima.
Ergens anders op de pagina wil ik een <div> refreshen.
Met dit in de header gaat ook dat prima.
<script>
$(document).ready(function() {
$("#commentrefresh").load("commentright.php");
var refreshId = setInterval(function() {
$("#commentrefresh").load('commentright.php?randval='+ Math.random());
}, 9000);
});
</script>
Alleen als ik ze allebei gebruik, dan gaat het menu zich steeds verbreden zodra ik 1 keer refresh of een interne link aanklik.
Ik heb het idee dat 2 keer "function" elkaar in de weg zit, maar ik ben echt een NOOB als het om javascript gaat.
Iemand met de verlossende oplossing ?
Ik heb het 2e script vervangen door een soortgelijke:
<script>
$(document).ready(function () {
setInterval(function() {
$.get("commentright.php", function (result) {
$('#commentrefresh').html(result);
});
}, 10000);
});
</script>
Dat geeft hetzelfde probleem, wat er gebeurt is dat niet alleen de <div> wordt gerefrehd , maar ook nog een script met de naam modernizr, mijn hoop is gevestigd dat ik daar iets in kan vinden
[size=xsmall]Toevoeging op 24/02/2014 13:55:10:[/size]
Ik ben er nog niet uit, het ligt niet aan de javascripts.
Zou het kunnen dat $.load hetzelfde doet als de php functie $_GET ?
Ik werk namelijk met vriendelijke urls die met een $_get worden opgehaald en geinclude .
[size=xsmall]Toevoeging op 24/02/2014 15:43:33:[/size]
Ik ben er achter door de console van google te lezen dat de waarde van mijn include file, in de load wordt gelezen. Blijkbaar moet ik de leesactie beter definieren, zou alleen niet weten hoe.
Er zijn geen foutmeldingen in de console, het zijn ook niet de scripts die conflicteren blijkt na veel zoekpogingen.
Ik zal schetsen wat er gebeurt (als ik de console bekijk)
In de pagina staat meerdere divs.
mijn.pagina.nl
<div 1>
<div 2*deze moet gerefreshd worden>
inhoud
</div>
</div>
eind.
Dit gaat goed,
maar zodra ik een pagina include met de $_GET (PHP) methode gebeurt het volgende.
mijn.pagina.nl/anderepagina.php
<div 1>
<div 2>
<div 1>
<div 2>
enzovoorts, enzovoorts
</div>
</div>
</div>
</div>
De inhoud van de div2 wordt niet de inhoud die gerefreshed moet worden, maar de complete inhoud van de website, en dat blijft zich herhalen in de "sub" div 2 en de boel loopt vast.
Ik moet dus voorkomen dat de inhoud van van G_GET van de PHP, geladen wordt door de javascript load.
Wat staat er in commentright.php wat betreft div's? Mogelijk komt daar de vermeendigvuldigingen vandaan.
Je kunt ook een bepaalde div van een pagina inladen. Misschien helpt dat.
$("#commentrefresh").load("commentright.php #div");
@Michael
je hebt me wel getriggerdom iets aan te passen, maar dat verhelpt het probleem niet.
Er is 1 div #commentrefresh, die staat om de include_once("commentright.php"); heen, en php pagina haalt nu alleen de online gebruikers op.
Wat er gebeurt is dat al de informatie uit de $_GET wordt gerefreshd , blijkbaar kan wat ik wil helemaal niet, de jquery load geeft blijkbaar ook de php $_GET terug en gebruikt de informatie die daar in staat.
Het is handig om even wat meer informatie te laten zien.
De include_once is niet nodig, want je 'load' hem al met jQuery, dus dan heb je 'm al 2x geladen.
Die randval is bedoeld om te voorkomen dat IE het geheel niet vernieuwd (het voorkomt dat de cache wordt gebruikt) dus die GET heeft hier niks mee te maken.
Dit was juist de veroorzaker van het probleem.
Ik gebruik .htaccess om vriendelijke URL's te lezen, maar dat beïnvloed ook de Jquery request.
Er is ook een andere oplossing, namelijk met javascript het antwoord van de server opsplitsen, maar dat is toch minder mooi, nu los ik het al op de server op.