我有一个表单,我通过jQuery Validate插件验证。一切都很好,除了一件事。
我有一个我使用的字段,远程规则,我正在使用AJAX检查是否已存在具有相同名称的应用程序记录。我只有在用户更改字段中的值时才需要执行此验证。
这是我的验证码:
$('#createapp').validate({
rules: {
appname: {
minlength: 8,
required: true,
remote: {
url: "<?php echo base_url();?>app/application/check_app",
type:"POST",
async: false,
data: {
appname: function() {
return $("#appname").val();
}
}
}
},
apptitle: {
required: true
}
},
messages: {
appname: {
remote: "Application with same name already exists"
}
},
highlight: function(label) {
$(label).closest('.control-group').addClass('error');
},
success: function(label) {
label
.text('OK!').addClass('valid')
.closest('.control-group').addClass('success');
}
});
我需要这样做:
仅当用户更改appname字段中的文本时才执行远程验证。我尝试使用依赖但不能使它工作。这基本上就是我的尝试:
remote: {
depends: function(element){
return ($('#appname').val() != "<?php echo trim($application[0]->app_name) ?>" );
}
答案 0 :(得分:0)
我终于使用了一种解决方法。以下是
将原始名称作为隐藏参数传递
<input type="hidden" name="orgappletname" id="orgappletname"
value="<?php echo $applet[0]->applet_name ?>">
设置jQuery与原始名称进行比较,看看是否在模糊时发生了变化。如果是,则触发ajax请求以检查更改的名称。
$('#appletname').blur(function(){
if($(this).val() != $('#orgappname').val()){
$.ajax({
url: "<?php echo base_url() . "apl/applet/check_applet" ?>",
data: "appletname=" + $(this).val(),
type: "POST",
success: function (msg) {
}
});
}
});
我不确定这是否是正确的方法,但它对我有用。
答案 1 :(得分:0)
@ user1017268
这也有效,不知道为什么,预计它会失败;-)如果你将远程验证规则换成一个单独的方法,那么你可以做一些像(coffeescript):
getEmailRule = () ->
which = window.location.pathname.split('/')[1]
if which == 'renew' then required: true
else remote: { url: "/user/exists", type: "POST", async: false }
isValid = $('#subscriptionForm').validate({
rules: {
email: getEmailRule()
password: "strongPass"
orderTotal: "gtZero"
}
}).form()
只有在续订用户已登录时email must exist
以后才执行远程电子邮件存在检查以进行订阅非续订(即注册); - )