2010-09-03 32 views
12

Mục tiêu của tôi là: Khi cho được nộp:hình thức jQuery nộp

  • một xác nhận vào mẫu được thực hiện: OK
  • một ajax được gọi là để thấy rằng tên truy cập và mật khẩu làm phù hợp: OK
  • nếu họ không phù hợp, hiển thị một lỗi: OK
  • nếu chúng phù hợp, sau đó REALLY SUBMIT dạng: NO T OK.

Thông báo sự cố là, tôi không thể gửi biểu mẫu vì có sự kiện gửi jquery trên đó!

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(); 
}) 

Trả lời

9

Bạn có thể gọi mẹ đẻ nộp sự kiện, vì vậy làm điều này:

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

Sau đó, trong bài gọi lại của bạn làm điều này:

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

Các this.submit() không đang kêu gọi ông jQuery .submit() chức năng kích hoạt, mà đúng hơn là hàm <form>.submit().

1

return false đang chặn hành động gửi biểu mẫu mặc định. Bạn có hoặc-return true từ form1Submit() chức năng để cho các hình thức mặc định nộp hành động làm công việc của mình, hoặc thêm $.post() khác bên trong else mà nộp dữ liệu mẫu không đồng bộ, nếu mục đích của bạn là để làm điều đó bằng ajaxical quyền hạn.

1

Vấn đề là form1Submit luôn trả về 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]);' có vẻ như lừa. Chỉ cần thay thế selfform bằng ID của biểu mẫu và bạn sẽ được đặt. Ví dụ: '$ ('# frm_test'). Trigger ('submit', [true]); ' – Devner

Các vấn đề liên quan