Tenho um formulário no qual gostaria que todos os campos fossem preenchidos. Se um campo for clicado e depois não preenchido, gostaria de exibir um fundo vermelho.
Aqui está o meu código:
$('#apply-form input').blur(function () {
if ($('input:text').is(":empty")) {
$(this).parents('p').addClass('warning');
}
});
Aplica a classe de aviso independentemente do campo que está sendo preenchido ou não.
O que estou fazendo errado?
jquery
validation
Keith Donegan
fonte
fonte
Respostas:
E você não precisa necessariamente
.length
nem vê se é>0
porque uma string vazia é avaliada como false de qualquer maneira, mas se você quiser, para fins de legibilidade:Se você tem certeza de que sempre funcionará em um elemento de campo de texto, basta usar
this.value
.Além disso, você deve observar que
$('input:text')
captura vários elementos, especifique um contexto ou use athis
palavra - chave se desejar apenas uma referência a um elemento solitário (desde que exista um campo de texto nos descendentes / filhos do contexto).fonte
.val().length
e, em vez disso, estava usando.length()
o próprio elemento.Todo mundo tem a idéia certa, mas eu gosto de ser um pouco mais explícito e aparar os valores.
se você não usar .length, uma entrada de '0' poderá ser sinalizada como ruim e uma entrada de 5 espaços poderá ser marcada como ok sem o $ .trim. Melhor da sorte.
fonte
this.val
estariaundefined
lá. Precisaria ser$(this).val()
- mas não há vantagem entre navegadores para isso, então deixei de fora por brevidade / velocidade.Fazê-lo em desfoque é muito limitado. Ele assume que havia foco no campo do formulário, então eu prefiro fazê-lo no envio e mapear através da entrada. Depois de anos lidando com truques sofisticados de desfoque, foco etc., manter as coisas mais simples renderá mais usabilidade onde for importante.
fonte
fonte
$
emif (('input:text').val().length == 0) {
que deveria serif ($('input:text').val().length == 0) {
você pode usar também ..
se você tiver dúvidas sobre espaços, tente ..
fonte
como é que ninguém mencionou
parece mais jquery para mim
fonte
O evento keyup detectará se o usuário também desmarcou a caixa (ou seja, o backspace gera o evento, mas o backspace não gera o evento de pressionamento de tecla no IE)
fonte
Considere usar o plugin de validação jQuery . Pode ser um exagero para campos obrigatórios simples, mas maduro o suficiente para lidar com casos extremos que você nem imaginou ainda (nem qualquer um de nós até encontrá-los).
Você pode marcar os campos obrigatórios com uma classe "obrigatório", executar um $ ('form'). Validate () em $ (document) .ready () e isso é tudo o que é necessário.
Também está hospedado na CDN da Microsoft, para entrega rápida: http://www.asp.net/ajaxlibrary/CDN.ashx
fonte
O
:empty
pseudo-seletor é usado para verificar se um elemento não contém filhos, você deve verificar o valor:fonte
Há outra coisa em que você pode pensar: atualmente, ela só pode adicionar a classe de aviso se estiver vazia; que tal remover a classe novamente quando o formulário não estiver mais vazio?
como isso:
fonte
fonte
Aqui está um exemplo usando keyup para a entrada selecionada. Ele também usa um ajuste para garantir que uma sequência de apenas caracteres de espaço em branco não acione uma resposta verdadeira. Este é um exemplo que pode ser usado para iniciar uma caixa de pesquisa ou algo relacionado a esse tipo de funcionalidade.
fonte
Verifique se todos os campos estão vazios e acrescente ON ou OFF no botão Filter_b
fonte
Você pode tentar algo como isto:
Ele aplicará o
.blur()
evento apenas às entradas com valores vazios.fonte
fonte
Com o HTML 5, podemos usar um novo recurso "obrigatório", basta adicioná-lo à tag que você deseja, como:
<input type='text' required>
fonte
Ótima coleção de respostas, gostaria de acrescentar que você também pode fazer isso usando o
:placeholder-shown
seletor CSS. Um pouco mais limpo para usar o IMO, especialmente se você já estiver usando jQ e tiver espaços reservados em suas entradas.Você também pode usar os seletores
:valid
e:invalid
se tiver entradas necessárias. Você pode usar esses seletores se estiver usando o atributo necessário em uma entrada.fonte
Uma solução limpa apenas para CSS seria:
fonte