gpt4 book ai didi

jQuery 验证插件 : valid() does not work with remote validation?

转载 作者:行者123 更新时间:2023-12-01 00:09:14 26 4
gpt4 key购买 nike

我开始关注this awesome tutorial ,但想在 keyup 上进行验证并将我的错误放在其他地方。远程验证在适当的时间显示自己的错误消息,让我认为我已经成功了。但如果我具体询问远程验证的字段是否有效,它会说“不”,实际上,它不是。

在 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 的新手,这一切都有点超出了我的理解范围。当我说“一点”时,我的意思是“方式方式”。

任何修复它的想法,或者一种看待它的新方法,都会有很大的帮助。

最佳答案

当您调用 $(this).valid() 时,它最终会异步调用/live_validations/check_login 。 valid() 方法会立即返回,而不是等待 check_login 完成,并且由于它不知道结果是什么,所以它只是返回 false。

查看 Validation 插件代码,我认为您应该调用 element() 方法,该方法将返回 true、false 或 undefined —— 它将在异步调用运行时返回 undefined,而 valid() 仅返回对或错。当您未定义时,您知道您仍然需要等待对服务器的调用返回。

我认为你可以做这样的事情(未经测试,但可以玩一下)。请注意,重复调用 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);
})

关于jQuery 验证插件 : valid() does not work with remote validation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2510623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com