Hallo,

Ik heb een foreach(), en daar wil ik jQuery binnen gebruiken.
nu zit ik het volgende probleem:
Als ik 10x op de eerste regel van de foreach() klik, opent de jQuery dialog 10x met in ieder dialog verschillende namen. Ik maak ook gebruik van een tabel.

Hoe kan ik dit oplossen en wat is de beste manier om te maken?


<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.js"></script>

<script type="text/javascript">
$(window).load(function(){ 
$("#test").click(function() {
    $("#dialog").dialog({ show: 'fade', hide: 'drop' });
});
 });
</script>



foreach($data as $row)
{
echo '
<tr id="test" data-player-name="'.$row['username'].'">
	<td><img src=images/'.$avatar.' ??/></td>
	<td>'.$row['username'].'</td>
	<td>'.$row['rank'].'</td>
</tr>';
}

echo '
<div id="dialog"><h3>'.$row['username'].'</h3>
';
//include('test.php');

echo '</div>';	


jQuery is clientside, en PHP is serverside.
Als je een request doet om een pagina te bekijken, wordt eerst PHP uitgevoerd, waarna de browser op zijn beurt de HTML en JavaScript uitvoert.

Als je dus data uit PHP op wilt halen zul je moeten kijken naar AJAX. Dit kan met de $.ajax(), $.post() en $.get() functie in jQuery. Als je data uit PHP wilt ophalen om deze asynchroon in te laden (vooral zeer ideaal voor externe servers waarbij je niet lang wilt wachten) dan moet je die data serverside tot bijv. een makkelijk geformat JSON-feed vormen.

Onthoud wel dat AJAX een middel is, en geen doel. ;-)
Bedankt! Ik zal het eens proberen. :)
Prima, succes. Als je vragen hebt, dan horen we het wel :)
een id moet uniek zijn. In een foreach opnemen <tr id="test"> kan tot onverwachte resultaten leiden.
De ene browser houdt het na het vinden van het eerste element voor gezien (er kan er immers maar 1 zijn) terwijl een ander vrolijk verder zoekt.

Beter is het om bijvoorbeeld een class op te nemen. Daarmee voorkom je in je eigen scripting ook dat je uitgaat van $('#test') gaat 1 element vinden, en je er toch 10 laat reageren.
Wat @Ivo zegt, je kunt een id niet meerdere keren (her)gebruiken, een id moet uniek zijn. Het gebruik van een class kan hier uitkomst bieden.

Eventueel zou je hier nog een container (div oid) met een id omheen kunnen zetten om het gebied waarbinnen de click-functionaliteit actief zou moeten zijn af te bakenen. Dit id zou je dan op kunnen nemen in je selector, in combinatie met de class.

Voor een grafisch effect (althans hier lijkt het op?) voor een pagina die alle informatie al ingeladen heeft is in principe geen AJAX nodig.

Reageren