Na nova versão do plugin de validação jQuery 1.9, por padrão, a validação de campos ocultos é ignorada . Estou usando o CKEditor para o campo de entrada de área de texto e ele oculta o campo e substitui-o por iframe. O campo está lá, mas a validação está desativada para campos ocultos. Com o plugin de validação versão 1.8.1, tudo funciona como esperado.
Então, minha pergunta é como habilitar a validação para campos ocultos com o plugin de validação v1.9.
Essa configuração não funciona:
$.validator.setDefaults({ ignore: '' });
jquery-validate
Xamã
fonte
fonte
<input type="text" name="myfield" id="myfield" required="required" style="display: none;">
. Não precisei alterar nenhuma configuração ou fazer algo especial.Respostas:
O autor do plug-in diz que você deve usar "colchetes sem as aspas" ,
[]
http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/
Para alterar essa configuração para todos os formulários:
(Não é necessário que
.setDefaults()
esteja dentro dadocument.ready
função)OU para um formulário específico:
EDIT :
Veja esta resposta para saber como habilitar a validação em alguns campos ocultos, mas ainda assim ignorar outros.
EDIT 2 :
Antes de deixar comentários que "isso não funciona" , lembre-se de que o OP está simplesmente perguntando sobre o plug - in jQuery Validate e sua pergunta não tem nada a ver com como o ASP.NET, MVC ou qualquer outra estrutura da Microsoft pode alterar o normal desse plug-in comportamento esperado. Se você estiver usando uma estrutura da Microsoft, o funcionamento padrão do plug-in jQuery Validate será substituído pelo
unobtrusive-validation
plug-in da Microsoft .Se você estiver tendo problemas com o
unobtrusive-validation
plug - in, consulte esta resposta: https://stackoverflow.com/a/11053251/594235fonte
Isso funcionou para mim, em um site ASP.NET MVC3 onde eu havia deixado a estrutura para configurar a validação discreta etc., caso seja útil para qualquer pessoa:
fonte
Certifique-se de colocar
NÃO dentro
$(document).ready
fonte
$.validator.setDefaults()
é colocado dentro ou fora do manipulador pronto para DOM. Compare este jsFiddle com este jsFiddle .Então, vou me aprofundar um pouco mais no motivo pelo qual isso não funciona, porque sou o tipo de pessoa que não consegue dormir à noite sem saber haha. Estou usando o jQuery validate 1.10 e o Microsoft jQuery Unobtrusive Validation 2.0.20710.0, publicado em 29/1/2013.
Comecei pesquisando o método setDefaults no jQuery Validate e o encontrei na linha 261 do arquivo não minificado. Tudo o que essa função realmente faz é mesclar suas configurações de json às existentes,
$.validator.defaults
que são inicializadas com a propriedade ignore sendo definida como ": hidden" junto com os outros padrões definidos no jQuery Validate. Então, neste ponto, substituímos o ignorar. Agora vamos ver onde essa propriedade padrão está sendo referenciada.Quando eu rastreei o código para ver onde
$.validator.defaults
está sendo referenciado. Percebi que isso estava sendo usado apenas pelo construtor para um validador de formulário, a linha 170 no jQuery validar arquivo não minificado.Nesse ponto, um validador mesclará as configurações padrão definidas e anexará ao validador de formulário. Quando você olha para o código que está validando, destacando, destacando etc., todos eles usam o objeto validator.settings para obter a propriedade ignore. Portanto, precisamos ter certeza de que devemos definir o ignorar com o método setDefaults, antes que o $ ("form"). Validate () seja chamado.
Se você estiver usando o Asp.net MVC e o plug-in discreto, perceberá depois de examinar o javascript que validar é chamado em document.ready. Também chamei meus setDefaults no bloco document.ready, que será executado após os scripts, o jquery é validado e discreto, porque defini esses scripts no html antes do que possui a chamada. Portanto, minha ligação obviamente não teve impacto na funcionalidade padrão de ignorar elementos ocultos durante a validação. Há algumas opções aqui.
Opção 1 - Como Juan Mellado apontou, você poderia ter a chamada fora do documento. Já que seria executada assim que o script fosse carregado. Não sei ao certo o momento, pois os navegadores agora são capazes de fazer o carregamento paralelo de scripts. Se eu estou sendo muito cauteloso, por favor, me corrija. Além disso, provavelmente há maneiras de contornar isso, mas para minhas necessidades eu não segui esse caminho.
Opção 2a - A aposta segura em meus olhos é apenas substituir o
$.validator.setDefaults({ ignore: '' });
interior do evento document.ready por$("form").data("validator").settings.ignore = "";
. Isso modificará a propriedade ignore que é realmente usada pelo jQuery validate ao fazer cada validação nos seus elementos para o formulário fornecido.Opções 2b - Depois de examinar um pouco mais o código, você também pode usar
$("form").validate().settings.ignore = "";
como forma de definir a propriedade ignore. O motivo é que, ao examinar a função validate, ele verifica se um objeto validador já foi armazenado para o elemento do formulário por meio da$.data()
função. Se ele encontrar um objeto validador armazenado com o elemento de formulário, ele retornará o objeto validador em vez de criar outro.fonte
Isso funcionou para mim em um site ASP.NET. Para habilitar a validação em alguns campos ocultos, use este código
$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";
Para ativar a validação para todos os elementos do formulário, use este
$("form").data("validator").settings.ignore = "";
Observe que use-os dentro de
$(document).ready(function() { })
fonte
Apenas adicionada
ignore: []
na página específica para o formulário específico, esta solução funcionou para mim.fonte
Isso está funcionando para mim.
fonte
A validação estava funcionando para mim no envio de formulários, mas não estava executando a validação orientada a eventos reativos na entrada das listas de seleção escolhidas.
Para corrigir isso, adicionei o seguinte para acionar manualmente o evento de validação de jquery adicionado pela biblioteca:
jquery.validate agora adicionará a
.valid
classe à lista de seleção subjacente.Advertência: Isso requer um padrão html consistente para as entradas do formulário. No meu caso, cada entrada arquivada é envolvida em um
div.form-group
e cada entrada possui.form-control
.fonte
Apenas encontre o texto ignore: ": hidden" no seu arquivo de validação de jquery e comente-o. Após comentar isso, nunca perderá nenhum elemento oculto para validar ...
obrigado
fonte