w3schools loop functions funciones for examples array php jquery while-loop dialog

loop - php function()



diálogo jquery en PHP while loop (3)

El problema se debe a que está creando múltiples elementos con el mismo atributo de id , donde el id debe ser único dentro de un único document . En su lugar, use clases comunes en el #trigger y a partir de allí encuentre el #dialog relacionado que se mostrará. Prueba esto:

<table class="table-hovered"> <tr> <th class="text-left big">TITOLO</th> <th class="text-centered" align="center"> <img src="img/w.png" width="35" height="35" title="wikipedia" align="middle"><br> wikipedia </th> </tr> <? while($objResult = mysql_fetch_array($objQuery)) { ?> <tr> <td class="text-left"><?=$objResult["titolo"];?></td> <td class="text-centered"> <button class="btn trigger">definizione</button> <div class="dialog" style="display: none;" title="definizione"> <iframe frameborder="0" scrolling="yes" width="480" height="380" src="def.php?titolo=<?=$objResult[''titolo''];?>"></iframe> </div> </td> </tr> <? } ?> </table>

A continuación, puede asignar un único controlador de eventos a los elementos .trigger en <head> o justo antes de </body> , así:

<script type="text/javascript"> $(function() { $(".trigger").click(function() { $(this).next(''.dialog'').dialog("open"); }); $(".dialog").dialog({ autoOpen: false, position: ''center'' , title: ''definizione'', draggable: true, width: 500, height: 400, resizable: true, modal: true, show: ''slide'', hide: ''fade'' }); }); </script>

El siguiente código funciona bien solo para el botón en la primera fila de la tabla. Los botones de las otras filas generadas automáticamente no abren ningún diálogo. Supongo que el problema es que no estoy asignando una id diferente a cada botón. ¿Cómo puedo hacer eso? Leí esta página pero nada funcionó.

<table class="table-hovered"> <tr> <th class="text-left big">TITOLO</th> <th class="text-centered" align="center"> <img src="img/w.png" width="35" height="35" title="wikipedia" align="middle"><br> wikipedia </th> </tr> <? while($objResult = mysql_fetch_array($objQuery)) { ?> <tr> <td class="text-left"><?=$objResult["titolo"];?></td> <td class="text-centered"> <button id="trigger" class="btn">definizione</button> <div id="dialog" style="display: none;" title="definizione"> <iframe frameborder="0" scrolling="yes" width="480" height="380" src="def.php?titolo=<?=$objResult[''titolo''];?>"></iframe> </div> </td> <script> $("#trigger").click(function() { $("#dialog").dialog("open"); }); $("#dialog").dialog({ autoOpen: false, position: ''center'' , title: ''definizione'', draggable: true, width: 500, height: 400, resizable: true, modal: true, show: ''slide'', hide: ''fade'' }); </script> </tr> <? } ?> </table>


En teoría, esto (agregando <?=$objResult["titolo"];?> los #trigger IDs en el ciclo:

<td class="text-left"><?=$objResult["titolo"];?></td> <td class="text-centered"><button id="trigger<?=$objResult["titolo"];?>" class="btn">definizione</button><div id="dialog" style="display:none;" title="definizione"><iframe frameborder="0" scrolling="yes" width="480" height="380" src="def.php?titolo=<?=$objResult[''titolo''];?>"></iframe></div></td> <script> $( "#trigger<?=$objResult["titolo"];?>" ).click(function() {

De lo que no estoy seguro es del uso del PHP "$" dentro del script jQuery, que podría requerir un poco más de ajuste.


Aquí hay una posible solución:

$("tr:has(.trigger):has(.dialog)").each(function() { var row = this var dialog = $(".dialog", row).dialog({ autoOpen: false, position: ''center'', title: ''definizione'', draggable: true, width: 480, height: 380, resizable: true, modal: true, show: ''slide'' }); $(".trigger", row).click(function() { dialog.dialog("open"); }); })