2010-09-03 105 views
12

我的目標是: 當提交:jQuery的形式提交

  • 的形式驗證是由:OK
  • 一個Ajax調用看到用戶名和密碼一致的情況:OK
  • 如果它們不匹配,顯示錯誤:OK
  • 如果匹配的話真是提交表單:NO T OK

事實上麻煩的是,我無法提交表單,因爲它上面有一個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(); 
}) 

回答

9

您可以調用本地提交的事件,所以這樣做:在您的帖子回調

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

那麼做到這一點:

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

this.submit()並沒有叫他的jQuery .submit()觸發功能,而是本地<form>.submit()函數。

1

return false正在阻止默認窗體提交操作。你有要麼return trueform1Submit()功能,讓默認的形式提交行動完成其工作,添加另一$.post()將數據提交到表單異步,如果你的意圖是它使用ajaxical做else內權力。

1

問題是form1Submit總是返回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]);'似乎有訣竅。只需用表單的ID替換自定義表單,您就可以全部設置。例如:'$('#frm_test')。trigger('submit',[true]); ' – Devner 2013-04-09 12:33:54