Foros del Web » Programando para Internet » Javascript »

Saber si un elemento no es editable

Estas en el tema de Saber si un elemento no es editable en el foro de Javascript en Foros del Web. Hola, me gustaría hallar la manera de saber si un elemento es editable, eso incluye inputs de texto, áreas de texto y cualquier elemento que ...
  #1 (permalink)  
Antiguo 17/07/2011, 09:01
zant95
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Saber si un elemento no es editable

Hola, me gustaría hallar la manera de saber si un elemento es editable, eso incluye inputs de texto, áreas de texto y cualquier elemento que tenga el valor de contenteditable en true.

He probado con esto, pero me falla la tercera condición, nunca es true aunque el elemento tenga como atributo contenteditable="true", las demás me devuelven el valor correcto.

Código Javascript:
Ver original
  1. if(!/textarea/i.test(node.parentNode.nodeName) && !/text/i.test(node.parentNode.type) && !/true/i.test(node.parentNode.contenteditable))

¿Hay una forma más sencilla de de hacer esto en vez de barajar todas las posibilidades?

Saludos.
  #2 (permalink)  
Antiguo 17/07/2011, 11:43
Avatar de Danielfuzz  
Fecha de Ingreso: septiembre-2007
Mensajes: 111
Antigüedad: 17 años, 1 mes
Puntos: 18
Respuesta: Saber si un elemento no es editable

holA zant95:

generalmente en html un objeto que no es editable tiene el atributo:

readonly="readonly"

o

disabled="disabled"

asi que si deseas saber mediante javascript podrias hacer lo siguiente:

Código:
var obj = document.getElementById('mielemento');
if(obj.getAttribute("readonly")==""readonly) //tabmién creo que podrias probar compararndo con true, pero no estoy seguro
alert('está habilitado');
else
alert('no está habilitado');
otra forma de acceder al atributo de un elemento html por js es así si no me equivoco:

Código:
mielemento.disabled;
mielemento.readonly;
Por cierot nunca había visto ese contenteditable, bueno Saludos espero haberte ayudado.

Saludos
  #3 (permalink)  
Antiguo 17/07/2011, 19:22
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Saber si un elemento no es editable

He probado lo que me dijiste pero no funciona, simplemente la condición nunca se cumple.
No sé, tiene que haber otra forma más fácil para hacer esto.
  #4 (permalink)  
Antiguo 17/07/2011, 22:04
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Saber si un elemento no es editable

buenas...
@zant95, lo primero es definirse correctamente. contenteditable no es lo mismo que un elemento de tipo control de formulario acepte la entrada de texto. contenteditable trabaja a un nivel totalmente distinto a como trabaja un elemento de control de formulario. no estoy al tanto de las capacidades de la API HTML5, pero es de mi entender que contenteditable es una característica que opera directamente con el código fuente del documento pero al estilo de procesador de palabras. no estoy seguro si todos los elementos sean editables a este nivel pero por ejemplo tienes la propiedad isContentEditable el cual devuelve un boolean indicando si el elemento puede ser editable o no de acuerdo al modo indicado en contentEditable. por el contrario, la propiedad contentEditable -notese que lo tienes mal escrito- es para cambiar el modo de este. los posibles valores son "false", "true" e "inherit" siendo el último como valor inicial. y finalmente, un elemento hijo de otro del cual se le ha cambiado su modo a editable -'true' en contentEditable-, al leer contentEditable del elemento hijo este te devolvera 'inherit'. pero con isContentEditable, el boolean cambia de acuerdo si el elemento o uno de sus padres se le ha indicado un valor distinto a 'inherit'. a lo que quiero llegar es que puede ser que estes empleando la propiedad incorrecta si es que en realidad estas usando contentEditable. ademas, nótese que -al menos en chrome- si asignas 'true' a la propiedad contentEditable de un input o textarea, no afecta la habilidad de entrar datos.

si te refieres a editable como posiblidad de entrar/cambiar contenido de un control -input o textarea-, deberias seguir la sugerencia de las propiedades readOnly y/o disabled.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 18/07/2011, 06:10
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Saber si un elemento no es editable

Muchísimas gracias zerokilled, no conocía la propiedad isContentEditable, la he aplicado al código y es capaz de detectar cualquier elemento editable.

Código Javascript:
Ver original
  1. if (strImage.test(node.nodeValue) && !/textarea/i.test(node.parentNode.nodeName) && !/text/i.test(node.parentNode.type) && !node.parentNode.isContentEditable) {return true;} else {return false;}

Devuelve true si el elemento no es editable y contiene cierto string, pero eso ya es otro tema ;)

Saludos.
  #6 (permalink)  
Antiguo 18/07/2011, 06:43
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Saber si un elemento no es editable

Por cierto, cosas como:
Código Javascript:
Ver original
  1. if(algo){ return true; }else{ return false; }
No tienen sentido, es mejor hacerlo directamente:
Código Javascript:
Ver original
  1. return algo;
o, en caso de que quieras devolver un boolean y "algo" no lo sea:
Código Javascript:
Ver original
  1. return !!algo;
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 18/07/2011, 06:52
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Saber si un elemento no es editable

Es que ese if es parte de una función que luego uso para comprobar algo, te pongo el resto del código:

Código Javascript:
Ver original
  1. function checkImage(node) {
  2.     var strImage = new RegExp(listImages);
  3.     if (strImage.test(node.nodeValue) && !/textarea/i.test(node.parentNode.nodeName) && !/text/i.test(node.parentNode.type) && !node.parentNode.isContentEditable) {return true;} else {return false;}
  4. }
  5.  
  6. function checkSound(node) {
  7.     var strSound = new RegExp(listSounds);
  8.     if (strSound.test(node.nodeValue) && !/textarea/i.test(node.parentNode.nodeName) && !/text/i.test(node.parentNode.type) && !node.parentNode.isContentEditable) {return true;} else {return false;}
  9. }
  10.  
  11. function spider(element) {
  12.     for (var x = 0;element[x];x++) {
  13.         if (checkImage(element[x])) {
  14.             renameImage(element[x]);
  15.             //debug(element[x]);
  16.         }
  17.         else if (checkSound(element[x])) {
  18.             renameSound(element[x]);
  19.             //debug(element[x]);
  20.         }
  21.         else {
  22.             spider(element[x].childNodes);
  23.         }
  24.     }
  25. }
  26.  
  27. setInterval('spider(window.document.body.childNodes)', 300);

Busca un texto de una cadena que cumpla todas esas condiciones nodo por nodo, y cuando lo encuentra envía ese elemento a otra función.
Aunque sea un intervalo que se ejecuta cada muy poco no consume apenas recursos, solo busca texto.
Tengo que hacer esto porque las páginas son dinámicas, aparecen y desaparecen elementos sin recargar la página, si esto no fuese así me bastaría con ejecutar esa función cuando se cargase la página.
  #8 (permalink)  
Antiguo 18/07/2011, 08:09
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Saber si un elemento no es editable

Creo que no me has entendido, me refiero a cambiar esto:
Código Javascript:
Ver original
  1. if (strImage.test(node.nodeValue) && !/textarea/i.test(node.parentNode.nodeName) && !/text/i.test(node.parentNode.type) && !node.parentNode.isContentEditable) {return true;} else {return false;}
Por esto:
Código:
return a && b && c && d;
Sustituyendo cada letra por lo que necesites claro.
Viene a ser lo mismo, pero con más sentido, creo yo.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #9 (permalink)  
Antiguo 18/07/2011, 13:14
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Saber si un elemento no es editable

Es verdad, se puede hacer directamente, creí que eso no funcionaba y nunca lo probé, gracias.

Etiquetas: editable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:03.