javascript if-else loop no llega a otra cosa

Estoy trabajando en un tutorial en este momento sobre la validación de formularios, y me gustaría recibir ayuda sobre por qué esta función siempre devuelve el if condición.

<html>
<head>
</head>
<body>
     <form id="form" action="#" method="post">
        <fieldset>
            <p>
                First Name:
                <input type="text" id="txt" />
            </p>
            <p> <input type="submit" value="submit" onclick="validate()" /> </p>
        </fieldset>
    </form>
    <script type="text/javascript"> 
        function validate() 
            {
            var userName = document.getElementById("txt").value;
            if (userName.length == 0)
                {
                alert("FINISH THAT UP");
                return false;
                } 
            else 
                {
                alert("thanks, " + UserName);
                }
            }
    </script>
</body>

preguntado el 01 de julio de 12 a las 08:07

¿El valor no siempre está vacío? -

No debería ser si el usuario ingresa algo para la entrada. -

4 Respuestas

sí llega a la else parte cuando el cuadro de texto no está vacío, pero luego falla con un error, por lo que el formulario se envía en silencio.

JavaScript distingue entre mayúsculas y minúsculas - UserName es diferente a userName por lo tanto indefinido.

Cambiar a:

alert("thanks, " + userName);

Para evitar tales problemas, puede envolver todo el bloque con try..catch Me gusta esto:

function validate() 
{
    try
    {
        var userName = document.getElementById("txt").value;
        if (userName.length == 0)
        {
            alert("FINISH THAT UP");
            return false;
        } 
        else 
        {
            alert("thanks, " + UserName);
        }
    } catch (err) {
        alert("general error while validating: " + err.message);
        return false;
    }
}

Con esto en su lugar, verá "UserName is undefined".

Caso de prueba en vivo.

Además, en una nota al margen: con su código actual, incluso con un valor vacío, el formulario aún se enviará aunque devuelva falso, eso es porque necesita cancelar el envío incluso:

<input type="submit" value="submit" onclick="return validate()" />

Olvidaste el return palabra clave en el onclick misma.

Respondido 01 Jul 12, 08:07

Wow, eso fue realmente completo. Un millón de gracias. - T-Bone

No hay problema, hay aún más, pero solo mencionaré esto como consejo: vincule el evento en un global onload en lugar de en línea. Este realmente no importa, solo una forma más elegante de lograr lo mismo. :) - El mago de las sombras odia a Omicron

JavaScript es un lenguaje que distingue entre mayúsculas y minúsculas. Así que corrige el userName nombre de la variable en la declaración else como se muestra a continuación.

  else {
      alert("thanks, " + userName); 
  }

Respondido 01 Jul 12, 08:07

¡Muchas gracias! Sin embargo, estoy desconcertado en cuanto a por qué eso afecta la alerta, ¿no debería aparecer al menos "gracias"? - T-Bone

@T-Bone: intentar acceder a una variable indefinida es un error de tiempo de ejecución en javascript, generar una excepción y detener la ejecución del script. - amigo00

¿Puedes probar esto? Creo que esto podría funcionar.

function validate() 
{
    try
    {
        var userName = document.getElementById("txt").value;
        if (userName)
        {
            alert("FINISH THAT UP");
            return false;
        } 
        else 
        {
            alert("thanks, " + UserName);
        }
    } catch (err) {
        alert("general error while validating: " + err.description);
    }
}

Respondido 01 Jul 12, 10:07

¿Es pura casualidad que hayas usado el nombre de variable exacto que yo usé y hayas cometido el mismo error que yo hice y lo arreglé desde entonces? - El mago de las sombras odia a Omicron

¿Esto lo solucionó? Acabo de usar la variable exacta, pero no había probado el código en sí, ya que lógicamente funciona, pero no sé si realmente funciona. - Rafael Pineda

que hay de esto

function validate(){
    $("#form").submit(function() {

    if($("#txt").val()==""){
        alert("FINISH THAT UP");
        return false;
    }
    if($("#txt").val()!=""){
        var un = $("#txt").val();
        alert("thanks, " + un);
        return true;
    }
   });

}

Respondido 01 Jul 12, 10:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.