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'
});
Respostas:
Você pode adicionar uma classe CSS de
cancel
a um botão de envio para suprimir a validaçãopor exemplo
Consulte a documentação do jQuery Validator desse recurso aqui: Ignorando a validação ao enviar
EDIT :
A técnica acima foi descontinuada e substituída pelo
formnovalidate
atributofonte
$('input[type=submit]').addClass('cancel')
, a classe deverá estar presente no carregamento da página.Outra maneira (não documentada) de fazer isso é chamar:
no evento de clique do botão (por exemplo).
fonte
$("form").validate().cancelSubmit = true;
. Tentei$("form").validate().cancelSubmit = false;
ligar$("form").validate();
para o envio do meu botão enviar. Graças$(yourForm).data('validator').cancelSubmit = false;
GraçasAinda outra maneira (dinâmica):
E para reativá-lo, basta definir o valor padrão:
Fonte: https://github.com/jzaefferer/jquery-validation/issues/725#issuecomment-17601443
fonte
Adicionar atributo formnovalidate à entrada
A adição de class = "cancel" agora está obsoleta
Consulte os documentos para Ignorar a validação ao enviar neste link
fonte
Você pode usar a opção onsubmit: false (consulte a documentação ) ao conectar a validação que não será validada no envio do formulário. E, em seguida, no botão asp: adicione um OnClientClick = $ ('# aspnetForm'). Valid (); para verificar explicitamente se o formulário é válido.
Você pode chamar isso de modelo de aceitação, em vez da exclusão descrita acima.
Observe que também estou usando a validação de jquery com o ASP.NET WebForms. Existem alguns problemas para navegar, mas depois de resolvê-los, a experiência do usuário é muito boa.
fonte
(Extensão de
@lepe
's e@redsquare
resposta paraASP.NET MVC
+jquery.validate.unobtrusive.js
)O plug-in de validação de jquery (não o discreto da Microsoft) permite que você coloque uma
.cancel
classe no botão de envio para ignorar completamente a validação (como mostrado na resposta aceita).(não confunda isso com
type='reset'
algo completamente diferente)Infelizmente, o
jquery.validation.unobtrusive.js
código de manipulação de validação (ASP.NET MVC) meio que estraga o comportamento padrão do plugin jquery.validate .Isso é o que eu criei para permitir que você coloque
.cancel
o botão enviar, como mostrado acima. Se a Microsoft "corrigir" isso, você poderá apenas remova este código.Nota: Se, na primeira tentativa, parecer que isso não está funcionando - verifique se você não está viajando de ida e volta ao servidor e vendo uma página gerada pelo servidor com erros. Você precisará ignorar a validação no servidor por outros meios - isso permite que o formulário seja enviado ao cliente sem erros (a alternativa seria adicionar
.ignore
atributos a tudo em seu formulário).(Observação: pode ser necessário adicionar
button
ao seletor se você estiver usando os botões para enviar)fonte
Pay with PayPal
botão enviar$(this).closest('form').data("validator", null).unbind().submit();
Isso definirá o validador como nulo e desatá-lo. Depois disso, ele enviará o formulário. Você pode redefinir a validação por esta linha:$.validator.unobtrusive.parse($("#YourUniqueFormId"));
.cancel
classe. NOTA: Se você estiver usando uma = 'imagem' tipo botão enviar, em seguida, a.cancel
classe não funcionará a menos que você mudar":submit"
para":submit,:image"
no plugin jQuery de validação originalOu
Mas sem sucesso em um validador requerido personalizado. Para chamar um envio dinamicamente, criei um botão de envio oculto falso com este código:
Agora pule a validação corretamente :)
fonte
$("form").validate().settings.ignore = "class-name";
Esta pergunta é antiga, mas eu encontrei outra maneira de contornar isso é o uso
$('#formId')[0].submit()
, que obtém o elemento dom em vez do objeto jQuery, ignorando assim qualquer gancho de validação. Este botão envia o formulário pai que contém a entrada.Além disso, verifique se você não tem nenhum
input
nome "submit" ou substitui a função nomeadasubmit
.fonte
Eu descobri que a maneira mais flexível é usar o JQuery:
Por exemplo, se em vez de enviar eu quero redirecionar, eu posso fazer:
ou posso enviar os dados para um endpoint diferente (por exemplo, se eu quiser alterar a ação):
Depois de fazer 'event.preventDefault ();' você ignora a validação.
fonte
Eu tenho dois botões para envio de formulários, o botão chamado salvar e sair ignora a validação:
fonte
Aqui está a versão mais simples, espero que ajude alguém,
fonte