2010-09-03 8 views
12

moim celem jest: Kiedy na to składać:forma jQuery przedstawić

  • walidację na formularzu jest: OK
  • AJAX jest powołany, aby zobaczyć, że nazwa użytkownika i hasło są identyczne: OK
  • jeśli nie pasuje, wyświetla błąd: OK
  • jeśli pasują, to naprawdę wysłać formularz: NO T OK.

W rzeczywistości chodzi o to, że nie mogę przesłać formularza, ponieważ istnieje na nim zdarzenie przesyłania 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(); 
}) 

Odpowiedz

9

Można zadzwonić native przedstawić zdarzenia, więc to zrobić:

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

Następnie w swoim poście zwrotnego to zrobić:

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

this.submit() nie dzwoni he funkcję wyzwalania jQuery .submit(), ale raczej natywna funkcja <form>.submit().

1

Blokuje domyślną akcję przesyłania formularza. Trzeba albo do return true z funkcji form1Submit() pozwolić formularz domyślny złożyć skargę wykonywać swoje zadania, lub aby dodać kolejną $.post() wewnątrz else który przekazuje dane do formularza asynchronicznie, jeśli zamiarem było zrobić za pomocą ajaxical uprawnienie.

1

Problem polega na tym, że form1Submit zawsze zwraca wartość false.

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]); wydaje się, że to wystarczy. Wystarczy zastąpić selfform identyfikatorem formularza i wszystko zostanie ustawione. Na przykład: '$ ('# frm_test'). Trigger ('submit', [true]); ' – Devner

Powiązane problemy