I have a form which I am validating through the jQuery Validate plugin. Everything is working fine except just one thing.
I have a field that I using, the remote rule, and I am using AJAX to check if there is already an application record with the same name. I need to perform this validation only if the user changes the value in the field.
This is the validate code I have:
$('#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');
}
});
I need to do this:
Perform remote validation only if the user changes the text in the appname field. I tried using depends but am not able to make it work. This is basically what I tried:
remote: {
depends: function(element){
return ($('#appname').val() != "<?php echo trim($application[0]->app_name) ?>" );
}
I finally used a workaround. Which is as following
Pass the original name as hidden parameter
<input type="hidden" name="orgappletname" id="orgappletname"
value="<?php echo $applet[0]->applet_name ?>">
setup jQuery to compare against the original name and see if something has changed on blur. If yes then trigger ajax request to check for the changed name.
$('#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) {
}
});
}
});
I am not sure if this is right way to do it, but it works for me.