Tenho um formulário com vários campos que estou validando (alguns com métodos adicionados para validação personalizada) com o excelente plug-in de validação jQuery de Jörn Zaeffere. Como contornar a validação com controles de envio especificados (em outras palavras, validação de disparo com algumas entradas de envio, mas não dispara a validação com outros)? Isso seria semelhante ao ValidationGroups com controles padrão do validador do ASP.NET.
Minha situação:
É com o ASP.NET WebForms, mas você pode ignorá-lo, se desejar. No entanto, estou usando a validação mais como uma "recomendação": em outras palavras, quando o formulário é enviado, a validação é acionada, mas em vez de uma mensagem "necessária" exibida, uma "recomendação" mostra que diz algo ao longo da linha "você perdeu os seguintes campos .... deseja continuar mesmo assim? " Nesse ponto do contêiner de erro, existe outro botão de envio agora visível que pode ser pressionado, o que ignoraria a validação e o envio de qualquer maneira. Como contornar os formulários .validate () para este controle de botão e ainda publicar?
A amostra Comprar e vender uma casa em http://jquery.bassistance.de/validate/demo/multipart/ permite isso para acessar os links anteriores, mas o faz criando métodos personalizados e adicionando-o ao validador. Eu preferiria não precisar criar métodos personalizados duplicando a funcionalidade já no plug-in de validação.
A seguir, uma versão abreviada do script imediatamente aplicável que eu tenho agora:
var container = $("#<%= Form.ClientID %> div.validationSuggestion");
$('#<%= Form.ClientID %>').validate({
errorContainer: container,
errorLabelContainer: $("ul",container),
rules: {
<%= YesNo.UniqueID %>: { required: true },
<%= ShortText.UniqueID %>: { required: true } // etc.
},
messages: {
<%= YesNo.UniqueID %>: 'A message.',
<%= ShortText.UniqueID %>: 'Another message.' // etc.
},
highlight: function(element, errorClass) {
$(element).addClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").removeClass("valid");
},
unhighlight: function(element, errorClass) {
$(element).removeClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").addClass("valid");
},
wrapper: 'li'
});