Foros del Web » Programando para Internet » Javascript »

onblur anula a onclick?

Estas en el tema de onblur anula a onclick? en el foro de Javascript en Foros del Web. -Tengo un checkBox, que al ser marcado activa un campo de texto. -El campo de texto, cuando pierde el foco, comprueba si el checkbox está ...
  #1 (permalink)  
Antiguo 24/11/2005, 07:12
 
Fecha de Ingreso: noviembre-2005
Mensajes: 42
Antigüedad: 19 años
Puntos: 0
onblur anula a onclick?

-Tengo un checkBox, que al ser marcado activa un campo de texto.
-El campo de texto, cuando pierde el foco, comprueba si el checkbox está marcado o no (para realizar unos calculos) y si el campo de texto está vacío saca un mensaje de error y situa de nuevo el foco en el campo de texto.

El problema está cuando intento desmarcar el checkBox sin haber metido ningún valor. Me sale el error, se vuelve a posicionar en el campo y el checkbox no se desmarca, ya que nunca llega a ejecutarse el evento onclick realmente (al posicionar el foco en el campo de texto no se realiza el onclick y no se porqué).

A ver si alguien me puede orientar, porque no se me ocurre que puedo hacer.
Muchas gracias
  #2 (permalink)  
Antiguo 24/11/2005, 10:35
 
Fecha de Ingreso: noviembre-2005
Mensajes: 42
Antigüedad: 19 años
Puntos: 0
Acabo de comprobar que el evento onclick es bloqueado por un alert, es decir, si quito el alert funciona correctamente. Alguna idea sobre como puedo evitar ese bloqueo?
  #3 (permalink)  
Antiguo 24/11/2005, 19:55
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
El alert no bloquea nada. El problema es que tu haces que el foco regrese despues del mensaje. Esto hace que se forme un ciclo cerrado.
Prueba sin el focus() despues del alert.
No se que tipo de formulario tendras, pero no me parece correcta esa manera.
Hubiese sido mejor poner parte de tu codigo
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #4 (permalink)  
Antiguo 25/11/2005, 02:08
 
Fecha de Ingreso: noviembre-2005
Mensajes: 42
Antigüedad: 19 años
Puntos: 0
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(
1filasi++){
        if(eval(
"formulario.chkExperienciaBaremo" ".checked == true")){
            if(!
isFill(eval("formulario.txtExpPuntuacion" i))){
                
alert("Error en la puntuacion de la Autobaremacion de Experiencia Profesional");
                eval(
"formulario.txtExpPuntuacion" ".focus()");
                return 
false;
                
            } else{
                var 
punt parseInt(eval("formulario.txtExpPuntuacion" ".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(campoChknombreCampo){
    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}"/> ptospor <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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:45.