¿Cómo identifico los cuadros de texto vacíos usando jQuery? Me gustaría hacerlo usando selectores si es posible. Además, debo seleccionar una identificación, ya que en el código real donde quiero usar esto, no quiero seleccionar todas las entradas de texto.
En los siguientes dos ejemplos de código, el primero muestra con precisión el valor escrito en el cuadro de texto "txt2" por el usuario. El segundo ejemplo identifica que hay un cuadro de texto vacío, pero si lo completa, aún lo considera vacío. ¿Por qué es esto?
¿Se puede hacer esto usando solo selectores?
Este código informa el valor en el cuadro 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 siempre informa que el cuadro de texto "txt2" está vacío:
<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
fuente
fuente
Respuestas:
De otra manera
o
o
Demo de trabajo
código de la demostración
jQuery
fuente
$('input:text').filter(function() { return $(this).val().trim() == ""; });
[value=""]
selector no funciona porque no encuentra un atributo de valor. Sin embargo, la técnica .filter funciona en este escenario.También puede hacerlo definiendo su propio selector:
Y luego acceda a ellos así:
fuente
?
Por cierto, tu llamada de:
se puede simplificar y acelerar enormemente con:
fuente
Como se mencionó en la publicación mejor clasificada, lo siguiente funciona con el motor Sizzle.
En los comentarios, se observó que eliminar la
:text
parte del selector hace que el selector falle. Creo que lo que está sucediendo es que Sizzle realmente se basa en el motor selector integrado del navegador cuando es posible. Cuando:text
se agrega al selector, se convierte en un selector CSS no estándar y, por lo tanto, debe ser manejado por Sizzle. Esto significa que Sizzle comprueba el valor actual de la ENTRADA, en lugar del atributo "valor" especificado en el código fuente HTML.Así que es una forma inteligente de buscar campos de texto vacíos, pero creo que se basa en un comportamiento específico del motor Sizzle (el de usar el valor actual de INPUT en lugar del atributo definido en el código fuente). Si bien Sizzle puede devolver elementos que coincidan con este selector,
document.querySelectorAll
solo devolverá elementos que tenganvalue=""
en el HTML. Caveat emptor.fuente
$("input[type=text][value=]")
Después de probar muchas versiones , encontré que esta era la más lógica.
Tenga en cuenta que
text
distingue entre mayúsculas y minúsculas.fuente
Sobre la base de la respuesta de @James Wiseman, estoy usando esto:
Esto capturará las entradas que contienen solo espacios en blanco además de las que están "verdaderamente" vacías.
Ejemplo: http://jsfiddle.net/e9btdbyn/
fuente
Yo lo recomiendo:
fuente
<input value="">
todavía coincidirá.{{Form::text('first_name', Input::old('first_name'), array('class' => 'form-control', 'required'))}}
) porque Laravel no agrega un atributo de 'valor' si está en blanco. Entonces usé:$('input:text:not([value]):visible:enabled:first');
para encontrar el primer campo de entrada de texto habilitado vacío visible.Aquí hay muchas respuestas que sugieren algo así,
[value=""]
pero no creo que realmente funcione. . . o al menos, el uso no es consistente. Estoy tratando de hacer algo similar, seleccionando todas las entradas con identificadores que comienzan con una determinada cadena que tampoco tienen ningún valor ingresado. Probé esto:pero no funciona. Tampoco revertirlos. Mira este violín . Las únicas formas que encontré para seleccionar correctamente todas las entradas con identificadores que comienzan con una cadena y sin un valor ingresado fueron
y
pero obviamente, los dobles negativos lo hacen realmente confuso. Probablemente, la primera respuesta de Russ Cam (con función de filtrado) sea el método más claro.
fuente
Esto seleccionará entradas de texto vacías con una identificación que comience con "txt":
fuente
Dado que crear un objeto JQuery para cada comparación no es eficiente, simplemente use:
Entonces puedes hacer:
fuente