Ya había pensado en lo del ciclo cerrado, pero haciendo pruebas pude comprobar que si quito el alert me funciona correctamente, el problema es que no puedo quitarlo porque es parte de una validación.
Sería ideal si pudiera saber si el usuario ha pinchado sobre el checkbox que activa/desactiva el campo de texto, pero temo que al ejecutarse el onblur antes no se si será posible obtener esos datos (y tampoco se como hacerlo).
El código es el siguiente:
Código PHP:
//VALIDA QUE SON CORRECTOS LOS VALORES INTRODUCIDOS POR EL USUARIO PARA LA AUTOBAREMACIÓN DE EXPERIENCIA PROFESIONAL
function validarAutobaremoExperiencia(formulario){
var filas = parseInt(formulario.filasExpAut.value);
for(i = 1; i < filas; i++){
if(eval("formulario.chkExperienciaBaremo" + i + ".checked == true")){
if(!isFill(eval("formulario.txtExpPuntuacion" + i))){
alert("Error en la puntuacion de la Autobaremacion de Experiencia Profesional");
eval("formulario.txtExpPuntuacion" + i + ".focus()");
return false;
} else{
var punt = parseInt(eval("formulario.txtExpPuntuacion" + i + ".value"));
if(isNaN(punt)){
alert("La puntuacion de la Autobaremacion de Experiencia Profesional no es un numero");
return false;
}
}
}
}
return true;
}
//ACTIVA LAS CASILLAS DE PUNTUACIÓN AUTOBAREMO PARA PODER INTRODUCIR DATOS
function activarAutobaremo(campoChk, nombreCampo){
var valor;
if(campoChk.checked == true){
document.getElementById(nombreCampo).disabled = false;
document.getElementById(nombreCampo).focus();
} else {
document.getElementById(nombreCampo).value = "";
document.getElementById(nombreCampo).disabled = true;
valor = totales();
document.getElementById('totalAutobaremoExp').value = valor;
}
}
<%-- LINEAS DE DETALLE DE LOS AUTOBAREMOS --%>
<c:forEach items="${listaAutobaremoExp}" var="baremoExp" varStatus="filaBaremoExp">
<tr>
<td align="center" width="5%">
<input id="chkExperienciaBaremo<c:out value='${filasExpBaremo}'/>" name="chkExpBaremo<c:out value='${filasExpBaremo}'/>" type="checkbox" value="<c:out value='${baremoExp.cdCaso}'/>" onclick="javascript:activarAutobaremo(this, 'txtExpPuntuacion' + '<c:out value='${filasExpBaremo}'/>');"/>
</td>
<td style="padding-left: 15px">
<c:out value="${baremoExp.dsDescripcion}" /> (<c:out value="${baremoExp.nmPuntuacion}"/> ptos. por <c:out value='${baremoExp.nmCantidad}'/> <c:out value='${baremoExp.dsMetrica}'/> )
</td>
<td align="center" style="padding-left: 15px" width="10%">
<input id="txtExpPuntuacion<c:out value='${filasExpBaremo}'/>" name="txtExpPuntuacion<c:out value='${filasExpBaremo}'/>" type="text" size="4" value="" disabled="true" onblur="javascript:validarAutobaremoExperiencia(document.frmPeticion);"/>
</td>
</tr>
<c:set var="filasExpBaremo" value="${filasExpBaremo + 1}"/>
<c:set var="filasGrupo" value="${filasGrupo + 1}"/>
<c:set var="auxTope" value="${baremoExp.tope}"/>
</c:forEach>
Muchas gracias