He visto algunas soluciones para esto, pero ninguna parece funcionar en mi caso, ya que no estoy tratando de mostrar comillas.

Para el registro, probablemente hay algún otro método para hacer esto que no estoy pensando en este momento, ¡por lo que definitivamente son bienvenidas soluciones alternativas!

Tengo una tabla que se genera a partir de una base de datos MySQL, y quiero hacer clic en cada fila (tr). Ya había hecho esto, pero hice clic en las etiquetas td, lo que no funcionó tan bien ya que tuve que hacer clic en el texto, no en ninguna parte del contenedor.

Esto es lo que hice para las etiquetas td

echo '<td><a href="case.php?id=' . $row['id'] . '">' . $row['time'] . '</a></td>';

Esto funcionó como dije, pero tuve que hacer clic en el texto en sí, así que descarté la idea. El uso del mismo método (etiquetas a) para las etiquetas tr no es compatible, y no pasa nada si intento usar ese método.

Esto es lo que he intentado hacer con las etiquetas tr ahora.

echo '<tr onclick="window.location="case.php?id=' . $row['id'] . '";"';

Esto no funciona, ya que la comilla de ubicación de la ventana cierra la comilla onclick.

¿Hay alguna otra forma de establecer la ubicación de la ventana? ¿O puedo usar algún otro método para redirigir al usuario?

1
Kossi 6 ene. 2020 a las 14:18

2 respuestas

La mejor respuesta

En general, es más fácil construir sus estructuras de lenguaje anidadas pieza por pieza utilizando funciones estándar para escapar de cada nivel.

Por ejemplo:

$id = $row['id'];
$url = "case.php?id=" . rawurlencode($id);
$javascript = "window.location=" . json_encode($url) . ";";
$html = '<tr onclick="' . htmlspecialchars($javascript) . '">';
echo $html;

Dicho esto, generalmente es aún mejor evitar anidar diferentes idiomas tanto como sea posible.

Puede abordarlo usando un enlace regular dentro de la fila y moviendo el JS a un controlador de eventos separado (estoy usando jQuery para este ejemplo, ya que lo hace más conveniente) que obtendrá la URL de ese enlace si alguna parte del se hace clic en la fila:

<?php
    $id = $row['id'];
    $url = "case.php?id=" . rawurlencode($id);
?>

<tr>
    <td>
         <a href="<?=htmlspecialchars($url)?>"> <?=htmlspecialchars($id);?></a>
    </td>
    // etc

<script>
    $("tr").on("click", event => {
        const tr = event.currentTarget;
        const link = $(tr).find("a");
        const url = link.attr("href");
        location = url;
    });
</script>
4
Quentin 6 ene. 2020 a las 11:29

Una función de JavaScript se ejecuta cuando "algo" lo invoca (lo llama). Puede llamar a la función abc () cada vez que se hace clic en tr.

Puedes hacer como

<?php
echo '<tr onclick="abc('.$row['id'].')"';
?>

Js:

function abc(id)
{
    window.location="case.php?id="+id;
}
0
Amanjot Kaur 6 ene. 2020 a las 11:25