Como identifico caixas de texto vazias usando jQuery? Eu gostaria de fazer isso usando seletores, se possível. Além disso, devo selecionar o id, pois no código real onde desejo usá-lo, não desejo selecionar todas as entradas de texto.
Em meus dois exemplos de código a seguir, o primeiro exibe com precisão o valor digitado na caixa de texto "txt2" pelo usuário. O segundo exemplo identifica que há uma caixa de texto vazia, mas se você preenchê-la ainda a considera vazia. Por que é isso?
Isso pode ser feito usando apenas seletores?
Este código informa o valor na caixa de texto "txt2":
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#cmdSubmit').click(function() {
alert($('[id=txt2]').val());
});
});
</script>
</head>
<body>
<form>
<input type="text" name="txt1" id="txt1" value="123" /><br />
<input type="text" name="txt2" id="txt2" value="" /><br />
<input type="text" name="txt3" id="txt3" value="abc" /><br />
<input type="submit" name="cmdSubmit" id='cmdSubmit' value="Send" /><br />
</form>
</body>
</html>
Este código sempre relata a caixa de texto "txt2" como vazia:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#cmdSubmit').click(function() {
if($('[id^=txt][value=""]').length > 0) {
if (!confirm("Are you sure you want to submit empty fields?")) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
}
});
});
</script>
</head>
<body>
<form>
<input type="text" name="txt1" id="txt1" value="123" /><br />
<input type="text" name="txt2" id="txt2" value="" /><br />
<input type="text" name="txt3" id="txt3" value="abc" /><br />
<input type="submit" name="cmdSubmit" id='cmdSubmit' value="Send" /><br />
</form>
</body>
</html>
jquery
css-selectors
Cros
fonte
fonte
Respostas:
Outra maneira
ou
ou
Demonstração de trabalho
código da demonstração
jQuery
fonte
$('input:text').filter(function() { return $(this).val().trim() == ""; });
[value=""]
seletor não funciona, pois não encontra um atributo de valor. No entanto, a técnica .filter funciona neste cenário.Você também pode fazer isso definindo seu próprio seletor:
E então acesse-os assim:
fonte
?
A propósito, sua chamada de:
pode ser bastante simplificado e acelerado com:
fonte
Conforme mencionado na postagem com melhor classificação, o seguinte funciona com o motor Sizzle.
Nos comentários, observou-se que remover a
:text
parte do seletor faz com que ele falhe. Eu acredito que o que está acontecendo é que o Sizzle realmente depende do mecanismo seletor embutido do navegador, quando possível. Quando:text
é adicionado ao seletor, ele se torna um seletor CSS não padrão e, portanto, deve ser tratado pelo próprio Sizzle. Isso significa que o Sizzle verifica o valor atual de INPUT, em vez do atributo "valor" especificado no HTML de origem.Portanto, é uma maneira inteligente de verificar se há campos de texto vazios, mas acho que depende de um comportamento específico do mecanismo Sizzle (o de usar o valor atual de INPUT em vez do atributo definido no código-fonte). Embora o Sizzle possa retornar elementos que correspondem a este seletor,
document.querySelectorAll
retornará apenas elementos que tenhamvalue=""
no HTML. Caveat emptor.fonte
$("input[type=text][value=]")
Depois de tentar várias versões , achei esta a mais lógica.
Observe que
text
diferencia maiúsculas de minúsculas.fonte
Com base na resposta de @James Wiseman, estou usando o seguinte:
Isso irá capturar as entradas que contêm apenas espaços em branco, além daqueles que estão "verdadeiramente" vazios.
Exemplo: http://jsfiddle.net/e9btdbyn/
fonte
Eu recomendo:
fonte
<input value="">
ainda corresponderá.{{Form::text('first_name', Input::old('first_name'), array('class' => 'form-control', 'required'))}}
) porque o Laravel não adiciona um atributo 'valor' se estiver em branco. Então eu usei:$('input:text:not([value]):visible:enabled:first');
para encontrar o primeiro campo de entrada de texto habilitado vazio visível.Há muitas respostas aqui sugerindo algo como,
[value=""]
mas não acho que realmente funcione. . . ou, pelo menos, o uso não é consistente. Estou tentando fazer algo semelhante, selecionando todas as entradas com ids começando com uma determinada string que também não tem nenhum valor inserido. Eu tentei isso:mas não funciona. Nem revertê-los. Veja este violino . As únicas maneiras que encontrei de selecionar corretamente todas as entradas com ids começando com uma string e sem um valor inserido foram
e
mas, obviamente, os duplos negativos tornam isso muito confuso. Provavelmente, a primeira resposta de Russ Cam (com uma função de filtragem) é o método mais claro.
fonte
Isso selecionará entradas de texto vazias com um id que começa com "txt":
fonte
Como criar um objeto JQuery para cada comparação não é eficiente, basta usar:
Então você pode fazer:
fonte