Foros del Web » Programando para Internet » Javascript »

Marcar checkbox desde otra etiqueta

Estas en el tema de Marcar checkbox desde otra etiqueta en el foro de Javascript en Foros del Web. Tengo este javascript : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código php: Ver original < script type = "text/javascript" >     function marcar_checkbox ( ) {     ...
  #1 (permalink)  
Antiguo 27/07/2009, 13:42
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Marcar checkbox desde otra etiqueta

Tengo este javascript:

Código php:
Ver original
  1. <script type = "text/javascript">
  2.     function marcar_checkbox() {
  3.     var marca = document.getElementById("mostrar-rss");
  4.     if (marca.checked == true) marca.checked = false;
  5.     else marca.checked = true;
  6. }
  7. </script>
Y el HTML es éste:

Código html:
Ver original
  1. <p class="descripcion" onclick="marcar_checkbox()"><input type="checkbox" id="mostrar-rss" name="mostrar-rss" value="1"  /> Mostrar miniaturas en avances RSS</p>
Funciona perfecto. Al hacer clic en el texto se activa/desactiva el checkbox. El problema es que hay varios checkbox y quisiera tomar la etiqueta por clase en lugar de ID, de manera que funcione para todos los checkbox que tengan esa clase. Tengo un rato intentándolo y no doy con la solución ¿cómo le hago?.
  #2 (permalink)  
Antiguo 27/07/2009, 14:22
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: Marcar checkbox desde otra etiqueta

el tema es q tenes q usar getElementsByName()

__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 27/07/2009, 14:26
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Marcar checkbox desde otra etiqueta

Gracias emiliodeg. Lo que pasa es que en este caso el atributo Name también es único al input. Mediante clases sería genial porque se permite colocar una sola común a todos.
  #4 (permalink)  
Antiguo 27/07/2009, 14:36
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Marcar checkbox desde otra etiqueta

Hola

que tal asi:

Código javascript:
Ver original
  1. function marcar(elemento){
  2.  
  3. pregunto si tiene la clase
  4.     clases = elemento.className; //tomo las clases del parrafo actual
  5.     aClases = clases.split(" ");
  6.     for(j=0;j<aClases.lenght;j++){
  7.     if (aClases[j]=="descripcion"){ //si el parrafo tiene la clase descripcion
  8.          (elemento.childNodes[0].checked) ? elemento.childNodes[0].checked = false: elemento.childNodes[0].checked = true;
  9.       }
  10. }
  11. }
  12.  
  13.  
  14. onclick="marcar(this)"

no lo he probado, lo he escrito a la carrera ojala y te ayude
__________________
My path is lit by my own fire, I only go where I desire
  #5 (permalink)  
Antiguo 27/07/2009, 14:52
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Marcar checkbox desde otra etiqueta

Ahora si, probado y todo ajajaja

Código javascript:
Ver original
  1. window.onload = function(){
  2. parrafos = document.getElementsByTagName("p"); //todos los parrafos
  3. for(i=0;i<parrafos.length;i++){
  4.     clases = parrafos[i].className; //tomo las clases del parrafo actual
  5.     aClases = clases.split(" "); //las clases del parrafo actual
  6.     for(j=0;j<aClases.length;j++){
  7.             if (aClases[j]=="descripcion"){ //si el parrafo tiene la clase descripcion
  8.            parrafos[i].onclick = function(){ //el evento click para el parrafo
  9.                        //asumiendo que el parrafo solo tiene un hijo o que el primero es el checkbox
  10.             (this.childNodes[0].checked) ?
  11.             this.childNodes[0].checked = false: this.childNodes[0].checked = true;
  12.  
  13.         }
  14.       }
  15.  
  16. }
  17.  
  18. }
  19. }
  20.  
  21.  
  22. </script>


suerte!
__________________
My path is lit by my own fire, I only go where I desire
  #6 (permalink)  
Antiguo 27/07/2009, 14:56
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Marcar checkbox desde otra etiqueta

me di cuenta de un error

Código javascript:
Ver original
  1. <script>
  2. window.onload = function(){
  3.  
  4.  
  5. parrafos = document.getElementsByTagName("p");
  6.  
  7. for(i=0;i<parrafos.length;i++){
  8.  
  9.  
  10.  
  11.     clases = parrafos[i].className; //tomo las clases del parrafo actual
  12.     aClases = clases.split(" ");
  13.    
  14.     for(j=0;j<aClases.length;j++){
  15.  
  16.             if (aClases[j]=="descripcion"){ //si el parrafo tiene la clase descripcion
  17.            parrafos[i].onclick = function(e){
  18.             if(this == e.target)
  19.             (this.childNodes[0].checked) ?
  20.             this.childNodes[0].checked = false: this.childNodes[0].checked = true;
  21.            
  22.         }
  23.       }
  24.  
  25. }
  26.  
  27. }
  28. }
  29. </script>
__________________
My path is lit by my own fire, I only go where I desire
  #7 (permalink)  
Antiguo 27/07/2009, 15:11
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
Puntos: 1485
Respuesta: Marcar checkbox desde otra etiqueta

hay navegadores que incluyen una funcion no estandar parecido a getElementsByTagName pero para obtener los elementos por clases, getElementsByClassName. para compensar los navegadores que no tienen dicha funcion puedes crear tu propia version. de esta manera puedes obtener los elementos independientemente del tipo de elemento: P, DIV, INPUT, etc. a continuacion el codigo para los navegadores que no tienen dicha funcion. por supuesto, tienes que primero cargar el codigo antes de cualquier otro para evitar problemas:
Código:
if(!document.getElementsByClassName){
document.getElementsByClassName = function(className){
var regex = new RegExp(className);
var array = [];
var element = arguments[1] || document.documentElement;
	for(var elem = element.firstChild; elem != null; elem = elem.nextSibling){
	if(elem.nodeType != 1)continue;
	if(regex.test(elem.className)) array.push(elem);
	if(elem.hasChildNodes()) array = array.concat(arguments.callee(className, elem));
	}
return array;
}}
esta funcion es parecida pero no exactamente igual a document.getElementsByClassName. difiere en que en lugar de devolver una coleccion de elementos devuelve un array. tienes que tener muy en cuenta ese detalle porque hay ciertas cosas que no se pueden lograr. por ejemplo, un cambio en el documento, como remover los elementos del documento, altera la coleccion de elementos pero en un array no se puede apreciar dicha alteracion. sencillamente porque un array no es lo mismo que una coleccion.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 27/07/2009 a las 15:18
  #8 (permalink)  
Antiguo 30/07/2009, 09:31
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Marcar checkbox desde otra etiqueta

Muchachos, mil gracias por su ayuda y por favor disculpen la tardanza en responder.

foreverOdd, gracias por el script el cual estoy aplicando en este momento a un caso. Te cuento que al final solucioné el asunto del clic con HTML a través de la etiqueta <label>. Al principio no la había aplicado por 2 razones: pensaba que iba a alterar la presentación y no sabía que podía anidarse entre otras etiquetas con plena libertad .

El caso es que paralelamente surgió un asunto que sí necesita del javascript. Recién estoy retomando todo el proyecto luego de un tiempo en "off" por de trabajo, pero lo importante es que esto avance antes de que comience a ponerse cansón .

zerokilled, gracias por esa buena aclaratoria. Al principio pensaba (ilusamente) que getElementByClass (o ClassName) podía agregarse igual de fácil que ByID, pero al buscar un poco me estrellé contra una pared. Hubiese sido genial hacer un simple reemplazo, pero tal como mencionas la diferencia radica en que las clases requieren ser leidas como un array (o al menos eso es lo que hasta ahora entiendo).

Saludos.
  #9 (permalink)  
Antiguo 30/07/2009, 16:01
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
Puntos: 1485
Respuesta: Marcar checkbox desde otra etiqueta

Cita:
Hubiese sido genial hacer un simple reemplazo, pero tal como mencionas la diferencia radica en que las clases requieren ser leidas como un array (o al menos eso es lo que hasta ahora entiendo).
en lo unico que se asemeja un array y una coleccion es que ambos tienen formas de indices para referirse a sus elementos. sin embargo, no necesariamente comparten las mismas funciones o propiedades. a continuacion un ejemplo de lo que podrias hacer.

Código:
function marcar_checkbox() {
var marca = document.getElementsByClassName("mostrar-rss"); // asumiendo mostrar-rss es la clase;
for(var i = 0; i < marca.length; i++){
marca[i].checked = !marca[i].checked;
}
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
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 05:13.