Me he encontrado con esto muchas veces (no quiero usar el 'botón de tipo de entrada' aquí) por qué oh por qué 'onclick' no llama a la función check (); ? La página aún se envía incluso cuando los campos están vacíos. Gracias por tus comentarios.

Javascript:

function check() { 
    var name =  document.getElementById('username_res');
    var passw_old =  document.getElementById('passw_reset_old');
    var passw_new =  document.getElementById('passw_reset');
    var button_res = document.getElementById('sub_res');

    if ((name.val() == "") && (passw_old.val().length == "") && (passw_new.val().length == "")) { 
        button_res.disabled = true; 
    } else {
        button_res.disabled = false;
    }
}

Html:

<form id="passw_res" name="passw_res" method="post" action="pass_reset.php">
<fieldset style="width:300px"><br/>
<legend id="pass_legend" align="left">Password reset</legend><br/>
<input type="text" id="username_res" name="username_res" maxlength="50" />
<input type="password" id="passw_reset_old" name="passw_reset_old" maxlength="16"/>
  <input type="password" id="passw_reset" name="passw_reset" maxlength="16"  />
  <input type="submit" value="submit" id="sub_res" name="sub_res" onclick="check();"/>
 </fieldset>
  </form>

Entonces ... la página no se debe enviar en campos vacíos, ¿por qué se envía? Gracias..

1
Mr X 19 sep. 2011 a las 01:05

6 respuestas

La mejor respuesta

Cambie su función a esto:

function check() { 

    var name =  document.getElementById('username_res').value;
    var passw_old =  document.getElementById('passw_reset_old').value;
    var passw_new =  document.getElementById('passw_reset').value;

    return ((name != '') && (passw_old != '') &&  (passw_new != ''));

}

En realidad, no tiene que cambiar el evento onclick a un envío, solo cámbielo a onclick="return check();". Debe devolver falso al evento onclick para evitar que se active.

Es posible que desee agregar algunas mejoras visuales para indicar por qué no se envía el formulario. De lo contrario, será confuso para el visitante.

5
CodeCaster 18 sep. 2011 a las 21:17

La página se envía porque no hay nada en su script check() que pueda detenerlo. Su secuencia de comandos solo deshabilita el botón de validación, pero para ese momento el clic / enviar ya ha sucedido y, por lo tanto, el formulario se enviaría.

Por lo tanto, use onsubmit='return check();', y en lugar de deshabilitar, devuelva verdadero o falso según su validación. Eso 'detendría' la acción de envío si check () devuelve falso, y continuará con el envío si devuelve verdadero.

0
Saket 18 sep. 2011 a las 21:11

En su lugar, puede intentar usar la función onSubmit del formulario

<form id="passw_res" action="pass_reset.php" onSubmit="check()">
0
Aaron Dougherty 18 sep. 2011 a las 21:09

Está intentando llamar a un método jquery en una variable de javascript stand.

Intenta esto en su lugar

if ((name.value == "") && (passw_old.value == "") && (passw_new.value == "")) {
    return false;  
} else { 
    return true; 
}

Y el botón de enviar debe ser

<input type="submit" value="submit" id="sub_res" name="sub_res" onclick="return check();"/>
1
Ash Burlaczenko 18 sep. 2011 a las 21:11

Debe devolver false para evitar la propagación de eventos.

Como aquí.

0
NiematojakTomasz 18 sep. 2011 a las 21:09

Debe cambiar el tipo de botón de type = "submit" a type = "button" y luego en la función check () si todo pasa necesita obtener el objeto de formulario y enviarlo.

Entonces, algo como document.getElementById ('formID'). Submit ()

0
Payson Welch 18 sep. 2011 a las 21:09