zik
Relacionado con esta pregunta aquí. ¿Puedo verificar si un elemento en el DOM tiene un valor o no? Estoy tratando de ponerlo en una declaración ‘si’ y no estoy seguro de si mi enfoque es correcto. Aquí va:
if (document.getElementById('customx')){
//do something
}
O debería ser:
if (document.getElementById('customx') == ""){
//do something
}
EDITAR: Por valor quiero decir, customx
es un cuadro de entrada de texto. ¿Cómo puedo verificar si este campo no tiene texto ingresado?
Jonas Hogh
El getElementById
El método devuelve un objeto Element que puede usar para interactuar con el elemento. Si no se encuentra el elemento, null
es regresado. En el caso de un elemento de entrada, el value
propiedad del objeto contiene la cadena en el atributo de valor.
Utilizando el hecho de que el &&
cortocircuitos del operador, y que ambos null
y la cadena vacía se considera “falsa” en un contexto booleano, podemos combinar las comprobaciones de la existencia de elementos y la presencia de datos de valor de la siguiente manera:
var myInput = document.getElementById("customx");
if (myInput && myInput.value) {
alert("My input has a value!");
}
-
@simon Funciona bien en Chrome para mí. Recuerde que no puede acceder a los elementos del objeto del documento hasta que se haya disparado el evento DOMContentLoaded desarrollador.mozilla.org/en-US/docs/Web/API/Window/…
– Jonas Hogh
28 de enero de 2020 a las 9:46
-
gracias déjame checar y tengo un problema te lo voy a contar
– Simón
30 de enero de 2020 a las 16:21
getElementById devolverá falso si el elemento no se encontró en el DOM.
var el = document.getElementById("customx");
if (el !== null && el.value === "")
{
//The element was found and the value is empty.
}
var input = document.getElementById("customx");
if (input && input.value) {
alert(1);
}
else {
alert (0);
}
Tu primera fue básicamente correcta. Esto, FYI, es malo. Realiza una verificación de igualdad entre un nodo DOM y una cadena:
if (document.getElementById('customx') == ""){
Los nodos DOM son en realidad su propio tipo de objeto JavaScript. Por lo tanto, esta comparación nunca funcionaría en absoluto, ya que está haciendo una comparación de igualdad en dos tipos de datos claramente diferentes.
Quieres:
if (document.getElementById('customx').value === ""){
//do something
}
El value
La propiedad le dará un valor de cadena y debe compararlo con una cadena vacía.
-
Manten eso en mente
" "
es diferente a""
pero difícil de detectar en la pantalla.– Quintín
10 de enero de 2012 a las 12:58
-
Tenga en cuenta que esto falla si el elemento no existe.
– Jonas Hogh
10/01/2012 a las 13:00
mlhDev
var myInput = document.getElementById("customx");
if (myInput.value.length > 0) {
//do something;
}
(.length > 0
es otra forma de verificar el elemento de entrada)
-
Manten eso en mente
" "
es diferente a""
pero difícil de detectar en la pantalla.– Quintín
10 de enero de 2012 a las 12:58
-
Tenga en cuenta que esto falla si el elemento no existe.
– Jonas Hogh
10/01/2012 a las 13:00
Vacío no es lo mismo que “sin valor”.
HTMLInputElement.value
es ''
cuando tiene una entrada inválida. Si .value
no es ''
, entonces no está vacío. Eso es definitivo, pero como hay momentos en que .value === ''
pero no vacío, tenemos que probar. Por ejemplo, en Chrome, con un number
tipo de entrada, si escribe .
o e
se colocará en el cuadro de entrada, pero .value
no cambiará de ''
porque no es válido.
<input type=number>
Podemos pedirle al navegador más información y afortunadamente ValidityState
está muy bien soportado. Básicamente, si no hay valor, pero el navegador dice que hay una entrada incorrecta, entonces no está vacío.
function isInputEmpty(input) {
return !input.value && !input.validity.badInput;
}
Editar: Créditos a @osullic por encontrar esto en las especificaciones:
El valor de un control es su estado interno. Como tal, es posible que no coincida con la entrada actual del usuario.
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#a-form-control’s-value
-
Esta es una respuesta interesante, pero sería bueno si pudiera vincular a alguna referencia. Me gustaría estar seguro de que realmente puedo confiar en los navegadores estándar que
HTMLInputElement.value
no cambia de ” a menos que lo ingresado pase la validación.– osullic
29 de noviembre de 2022 a las 14:11
-
De hecho, la especificación parece coincidir con lo que dices: https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#a-form-control’s-value
– osullic
29 de noviembre de 2022 a las 14:49
-
@osullic Gracias por la referencia. Descubrí esto porque estoy tratando de implementar
HTMLInputElement
con componentes web y estoy tratando de seguir de cerca las especificaciones. Hay una manera de detectar con:placeholder-shown
pero necesita un marcador de posición (incluso si está en blanco) y eso puede afectar la selección de texto.badInput
parece más compatible.– Mecha corta
29 de noviembre de 2022 a las 16:39
Definir “valor”. ¿Te refieres al contenido del texto? elementos secundarios? A
value
¿atributo?– Señor Lister
10 de enero de 2012 a las 12:42
¿A qué te refieres con valor?
<input type="text" value="myValue">
o<span>myValue</span>
?– Jonas Hogh
10 de enero de 2012 a las 12:42
Hola, lo siento, debería haber sido más explícito en mi pregunta. he actualizado mi pregunta
– zik
10 de enero de 2012 a las 12:43