2010-09-03 14 views
12

Mi objetivo es: Cuando para se somete:forma jQuery presentar

  • una validación en el formulario se hace: OK
  • una ajax se llama para ver ese nombre de usuario y la contraseña coinciden: OK
  • si no coinciden, mostrará un error: OK
  • si coinciden, a continuación, presentar realmente la forma: nO T OK.

De hecho, el problema es que no puedo enviar el formulario porque hay un evento de envío de jquery.

function form1Submit() { 
var username=$('#username').val(); 
var password=$('#password').val(); 
if (username.length<2) { 
    return false; 
} 
if (password.length<2) { 
    return false; 
} 
$.post("check.php", { username: username, password:password }, function(data) { 
    if (data=="ko") { 
     alert('bad password'); 
     return false; 
    } else { 
    //to be done here ! 
    } 
}); 
    return false; 
} 
function init() { 
    $('#form1').submit(function(){ 
     return form1Submit(); 
    }) 
} 
$(document).ready(function(){ 
    init(); 
}) 

Respuesta

9

puede llamar a la nativa Envía una prueba, por lo que hacer esto:

$('#form1').submit(form1Submit); 

Luego, en su puesto de devolución de llamada ello:

$.post("check.php", { username: username, password:password }, function(data) { 
    if (data=="ko") { 
     alert('bad password'); 
    } else { 
     this.submit(); 
    } 
}); 

El this.submit() no está llamando a que la función de disparo jQuery .submit(), sino más bien el nativo <form>.submit() función.

1

El return false está bloqueando la acción predeterminada de envío de formularios. Tiene ya sea a return true de la función form1Submit() para que el formulario predeterminado presentar la acción de hacer su trabajo, o para añadir otro $.post() dentro del else el que envía los datos a la forma asíncrona, si su intención era hacerlo usando ajaxical potestades.

1

El problema es que form1Submit siempre devuelve falso.

1
function form1Submit(ev, ok) { 

    ev.stopPropagation(); 

    ok = (typeof ok != 'undefined') ? ok : false; 

    if (ok) 
    return true; 

    var username=$('#username').val(), 
     password=$('#password').val(), 
     selfForm = this; 

    if (username.length < 2) 
    return false; 

    if (password.length < 2) 
    return false; 

    $.post("check.php", { username: username, password:password }, function(data) { 
    if (data=="ko") { 
     alert('bad password'); 
    } else { 
     $(selfForm).trigger('submit', [true]); // again submit but with ok parameter 
    } 
    }); 

    return false; 
} 

function init() { 
    $('#form1').bind('submit', form1Submit); 
} 

$(document).ready(function(){ 
    init(); 
}) 
+0

'$ (selfForm) .trigger ('submit', [true]);' parece hacer el truco. Simplemente reemplace selfform con el ID del formulario y estará todo listo. . Por ejemplo: '$ ('# frm_test') de disparo ('enviar', [verdadero]); ' – Devner

Cuestiones relacionadas