2010-03-24 81 views
4

我是從this awesome tutorial開始的,但是想對keyup進行驗證,並把我的錯誤放在其他地方。遠程驗證在適當的時候顯示自己的錯誤消息,讓我覺得我有它的工作。但是如果我具體詢問一個具有遠程驗證的字段是否有效,它說不,實際上它不是。jQuery驗證插件:有效()不適用於遠程驗證?

在application.js中我有這個...

$("#new_user").validate({ 
    rules: { 
     "user[login]": {required: true, minlength: 3, remote: "/live_validations/check_login"}, 
    }, 
    messages: { 
     "user[login]": {required: " ", minlength: " ", remote: " "}, 
    } 
}); 

$("#user_login").keyup(function(){ 
    if($(this).valid()){ 
     $(this).siblings(".feedback").html("0"); 
    }else{ 
     $(this).siblings(".feedback").html("1"); 
    } 
}) 
在Rails應用程序

然後這個...

def check_login 
    @user = User.find_by_login(params[:user][:login]) 
    respond_to do |format| 
     format.json { render :json => @user ? "false" : "true" }  
    end 
    end 

我認爲我的問題可能擁有一切與此有關在jQuery上檢票,並試圖實現這個代碼,但是,對於jQuery來說是新手,這一切都超出了我的想象。當我說,我的意思是方式。

解決這個問題的任何想法,或者一種新的方法來看待它,將是一個很大的幫助。

+0

http://plugins.jquery.com/node/13144是我所指的票。 3分是不夠的在一篇文章中發佈2個鏈接:( – hellodally

回答

6

當您調用$(this).valid()時,它最終異步調用/ live_validations/check_login。然而valid()方法馬上回來,並沒有等待check_login完成,並且由於它不知道結果是什麼,它只返回false。我認爲你應該調用element()方法,它會返回true,false或undefined - 它將在異步調用運行時返回undefined,而僅在valid()方法中返回undefined返回true或false。當你不確定的時候,你知道你還需要等待電話回到服務器。

我認爲你可以做這樣的事情(未經測試,但可以玩的東西)。請注意,對element()的重複調用不會啓動新的Ajax調用;他們只在價值發生變化時才這樣做。所以這裏沒有任何傷害。

function checkResult() { 
    var valid = $(formSelector).validate().element('#user_login'); // Will not launch a new request if the value hasn't changed 
    if (typeof valid == 'undefined') { 
    setTimeout("checkResult()", 100); 
    } 
    else { // it's done! 
    if(valid){ 
     $(this).siblings(".feedback").html("0"); 
    }else{ 
     $(this).siblings(".feedback").html("1"); 
    } 
    } 
}; 
$("#user_login").keyup(function(){ 
    $(formSelector).validate().element('#user_login'); // launches the remote request 
    setTimeout("checkResult()", 100); 
}) 
+0

拍攝。我忘了所有關於這個問題。我最終放棄了jquery驗證,贊成小一點的東西,我翻了個身,雖然看起來很棒但很喜歡遲到的接受和謝謝! – hellodally

+1

+1。我在ASP.NET MVC應用程序中使用了此處描述的方法,在那裏我遇到了類似於'valid()'方法的問題,而不是等待遠程驗證完成。我必須對我的應用程序做一些細微的修改,但是這個想法像一個魅力一樣工作。謝謝! –

+1

當異步調用正在運行時'element'不再提供'undefined'。請參閱http://stackoverflow.com/questions/29734937 /使用-jquery-validators-valid-or-element-method-with-remote-methods獲取更多信息。 – user1032531