Ciao, puoi fare in vari modi.
Personalmente sono arrivato alla seguente soluzione:
Per rendere non selezionabile il campo input si può usare l'attributo disabled.
A quel punto, sull'oggetto del validate, si può specificare la proprietà ignore per ignorare i campi con tale attributo, così che non siano considerati durante la validazione.
Per controllare se il contenuto di un campo input viene cancellato (quindi il campo risulta vuoto) si può usare l'evento change (in jQuery) che viene innescato dopo la perdita del focus se il contenuto è cambiato. Si può usare anche l'evento input, per avere un controllo immediato durante la digitazione dentro il campo.
Nel callback, specificato per questi eventi, andranno effettuati dei controlli per impostare l'attributo disabled ed eseguire nuovamente la validazione sul campo interessato.
Giusto un esempio per chiarire quanto ti ho indicato:
codice:
<!DOCTYPE HTML>
<html>
<head>
<title>Esempio</title>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="http://jqueryvalidation.org/files/dist/jquery.validate.min.js"></script>
<style type="text/css">
input.error{border-color:red;}
label.error{color:red;}
</style>
</head>
<body>
<form id="form" method="get" action="#">
<fieldset>
<legend>Form validation with jQuery</legend>
<p>
<label>Ragione Sociale</label>
<input id="ragione_sociale" name="ragione_sociale">
</p>
<p>
<label>Partita IVA</label>
<input id="piva" name="piva">
</p>
<p>
<input type="submit" value="Submit">
</p>
</fieldset>
</form>
<script>
$("#form").validate({
rules: {
piva: {
required: function(e){return $("#ragione_sociale").val()!=""}
}
}
,messages: {
piva: {
required:"Campo obbligatorio se compili il campo: Ragione Sociale"
}
}
,ignore: ":hidden, :disabled"
});
$("#ragione_sociale").on("change input",function(e){
var flag = this.value=='';
if (flag) $("#piva").valid();
$("#piva").prop('disabled', flag);
}).change();
</script>
</body>
</html>