Veo que el problema es que en el código JavaScript utiliza document.querySelectorAll('nota').value
, lo cual es incorrecto porque querySelectorAll
devuelve una lista de nodos, no un único valor, y además no selecciona correctaemnte los campos de nota.
Podrías intentar solucionarlo calculando el estado directamente en el servidor (sería lo ideal), sin embargo también lo puedes hacer desde JS.
Desde PHP:
<td width="120" align="center" valign="middle">
<?php
$nota = $CPensum['creditos'];
if ($nota === "" || $nota === null) {
echo "Pendiente";
} elseif ($nota >= 3) {
echo "Aprobado";
} else {
echo "No aprobado";
}
?>
</td>
Con eso aseguras que cada registro muestre el estado correcto basado en la nota.
Desde JS:
- Añade una clase al
input
que contiene las notas.
<input type="text" name="nota" class="inputTextoCentrado nota" value="<?php echo $CPensum['creditos']; ?>" readonly>
- Actualiza el JS para iterar correctamente.
document.addEventListener("DOMContentLoaded", function () {
const filas = document.querySelectorAll("tbody.GrupoBodyTabla tr");
filas.forEach(fila => {
const notaInput = fila.querySelector(".nota");
const estadoCelda = fila.querySelector("td:nth-child(5)");
const nota = parseFloat(notaInput.value);
if (isNaN(nota) || notaInput.value === "") {
estadoCelda.textContent = "Pendiente";
} else if (nota >= 3) {
estadoCelda.textContent = "Aprobado";
} else {
estadoCelda.textContent = "No aprobado";
}
});
});
- Asegúrate de que la celda del estado esté vacía inicialmente.
<td width="120" align="center" valign="middle"></td>
Cualquiera de las dos podría servirte.