Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Seleccionar todos los checkbox y dar color al tr

Estas en el tema de Seleccionar todos los checkbox y dar color al tr en el foro de Javascript en Foros del Web. Hola a todos, de nuevo por estos foros, si es que no podemos pensar que nunca sabemos demasiado Mi problema es que quiero conseguir que ...
  #1 (permalink)  
Antiguo 12/01/2015, 13:26
Avatar de Carlos1975  
Fecha de Ingreso: mayo-2005
Mensajes: 29
Antigüedad: 18 años, 11 meses
Puntos: 0
Seleccionar todos los checkbox y dar color al tr

Hola a todos, de nuevo por estos foros, si es que no podemos pensar que nunca sabemos demasiado

Mi problema es que quiero conseguir que al poner la opcion de seleccionar todos... se coloreen todos los tr que incluyen el checkbox seleccionado.

Dejo el codigo de mi script para ver si me podeis ayudar, busco la compatibilidad con todos los navegadores por lo menos con los principales. (IE, moz, crome)


ARCHIVO productos.php

<body> ......

Código PHP:
Ver original
  1. <?php
  2.  
  3. $productos = mysql_query("SELECT * FROM tblproducts ORDER BY IdProducto ASC");
  4. $totalRows = mysql_num_rows($productos);
  5.  
  6. ?>

Código HTML:
Ver original
  1. <form name="select_form" id="select_form" method="POST" action="productos_delete.php">
  2.  
  3. <table cellpadding="0" cellspacing="0" border="0" class="display" id="productos">
  4.     <thead>
  5.         <tr>
  6.             <td width="5%" rowspan="2">&nbsp;</td>
  7.             <td width="10%" rowspan="2">Imagen</td>
  8.     </tr>
  9.     <tr>
  10.             <th width="5%">ID</th>
  11.             <th width="10%">Referencia</th>
  12.             <th width="25%">Nombre Producto</th>
  13.             <th width="10%">Precio</th>
  14.             <th width="10%">Tipo IVA</th>
  15.             <th width="10%">Cantidad</th>
  16.             <td width="5%">Visible</td>
  17.             <td width="10%">&nbsp;</td>
  18.             <td width="10%">&nbsp;</td>
  19.     </tr>

Código PHP:
Ver original
  1. <?php
  2.  
  3. // codigo introducido en el tr que quiero que se seleccione y se coloree
  4.      
  5. while($reg = mysql_fetch_array($productos)) {
  6.    
  7. echo '<tr class="selected" onclick="check_selected(this)" id="tr_selected">';
  8. echo '<td align="center"><input type="checkbox" name="check[]" id="check" value="'.$reg['idProducto'].'" /></td>';
  9. echo '<td align="center">';
  10. echo MostrarImagenProducto($reg['idProducto']).'</td>';
  11. echo '<td align="center">'.$reg['idProducto'].'</td>';
  12. echo '<td align="center">'.$reg['strReferenciaProducto'].'</td>';
  13. echo '<td align="left">'.$reg['strNombreProducto'].'</td>';
  14. echo '<td align="center">'.$reg['dblPrecioProducto'].' €</td>';
  15. echo '<td align="center">'.TextoTipoIVA($reg['intTipoIVA']).'</td>';
  16. echo '<td align="center">'.$reg['intStock'].'</td>';
  17. echo '<td align="center">'.ObtenerImagenEstado($reg['intEstadoProducto']).'</td>';
  18. echo '<td align="center"><a class="edit" href="productos_edit.php?product='.$reg['idProducto'].'"></a></td>';
  19. echo '<td align="center">';
  20. echo '<select OnChange="if(this.options[1].selected) { DuplicateElement('.$reg['idProducto'].'); }
  21.                        if(this.options[2].selected) { DeleteElement('.$reg['idProducto'].'); }" >';
  22. echo '<option></option>';
  23. echo '<option>Duplicar</option>';
  24. echo '<option>Eliminar</option>';
  25. echo '</select>';
  26. echo '</td></tr>';
  27.                      
  28. }
  29.  
  30. ?>

Código HTML:
Ver original
  1.         <tr>
  2.             <th colspan="4" class="sel_check">
  3. <select OnChange="if(this.options[1].selected) { SelectElements(); }
  4.                  if(this.options[2].selected) { DeselectElements(); }
  5.                                 if(this.options[3].selected) { DeleteElementsSelected(); }" id="select_id">
  6. <option value="0" class="title">Acciones masivas</option>
  7. <option value="1" class="img_sel">Seleccionar todos</option>
  8. <option value="2" class="img_des">Deseleccionar todos</option>
  9. <option value="3" class="img_del">Eliminar productos</option>
  10.                 </select>
  11.             </th>
  12.             <th colspan="7"></th>
  13.         </tr>
  14.     </tfoot>
  15.  
  16.  
  17. </form>
  18.  
  19. </body>
  20. </html>


Y las funciones javascript son las siguientes:
Todas funcionan corectamente pero no consigo darle color al tr donde esta el checkbox seleccionado.

ARCHIVO global_functions.js

Código Javascript:
Ver original
  1. function check_selected(i) {
  2.     ch = i.getElementsByTagName("input")[0];
  3.     ch.checked =! ch.checked;
  4.     if (ch.checked) {
  5.         i.style.backgroundColor = "#ffc";
  6.     } else {
  7.         i.style.backgroundColor = "#fff";
  8.     }
  9. }
  10.  
  11. //------------------------------------------------------------------
  12. //--------------------------------------------------- select options
  13.  
  14. function SelectElements() {
  15.     for (i = 0; i < document.select_form.elements.length; i++)
  16.     if (document.select_form.elements[i].type == "checkbox") {
  17.         document.select_form.elements[i].checked = true;
  18.         document.select_form.select_id.value = 0;
  19.     }
  20. }
  21.  
  22. function DeselectElements() {
  23.     for (i = 0; i < document.select_form.elements.length; i++)
  24.     if (document.select_form.elements[i].type == "checkbox")       
  25.         document.select_form.elements[i].checked = false;
  26.         document.select_form.select_id.value = 0;
  27. }
  28.  
  29. function DeleteElementsSelected() {
  30.     var option = document.getElementById("select_form").check;
  31.     var cont = 0;
  32.     for (var x = 0; x < option.length; x++) {
  33.         if (option[x].checked) {
  34.         cont = cont + 1;
  35.         }
  36.     }
  37.     if (cont == 0) {
  38.         alert("No ha seleccionado ningun elemento")
  39.         location.reload();
  40.     } else {
  41.         message = confirm("Seguro que desea eliminar los elementos seleccionados?")
  42.         if (message != 0) {
  43.             document.all["select_form"].submit();
  44.         } else {
  45.             document.select_form.select_id.value = 0;
  46.             return;
  47.         }
  48.     }
  49. }
  50.  
  51. function DuplicateElement(i) {
  52.     message = confirm("Se duplicara todo el contenido de esta seleccion")
  53.     if (message != 0) {
  54.         window.location = "../admin/productos_duplicate.php?producto="+i+"";
  55.     } else {
  56.         location.reload();
  57.     }
  58. }
  59.  
  60. function DeleteElement(i) {
  61.     message = confirm("Seguro que desea eliminar el elemento seleccionado?")
  62.     if (message != 0) {
  63.         window.location = "../admin/productos_delete.php?producto="+i+"";
  64.     } else {
  65.         location.reload();
  66.     }
  67. }

Seguro que es algo sencillisimo pero se me escapa.

Gracias : porra:

Última edición por Carlos1975; 12/01/2015 a las 13:44
  #2 (permalink)  
Antiguo 12/01/2015, 14:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Seleccionar todos los checkbox y dar color al tr

¿Estás buscando colorear la fila en donde está el checkbox marcado? Entonces, hazlo así:

Código Javascript:
Ver original
  1. var checkGroup = document.getElementsByTagName("input"),
  2.     total = checkGroup.length, i;
  3.  
  4. for (i = 0; i < total; i++){
  5.     if (checkGroup[i].name == "check[]"){ //Para cada <input> con el nombre 'check[]'
  6.         checkGroup[i].onchange = function(){ //Cuando cambie el estado del checkbox
  7.             if (this.checked){ //Si está marcado
  8.                 this.parentNode.parentNode.style.background = "yellow"; //Fondo amarillo
  9.             }
  10.             else{ //Si no está marcado
  11.                 this.parentNode.parentNode.style.background = "white"; //Fondo blanco
  12.             }
  13.         };
  14.     }
  15. }

Pude haberlo hecho en menos líneas, pero así como está, es compatible hasta con IE6.

P.D.: Nunca asignes el mismo id a más de un elemento en el mismo documento. Recuerda que se trata de un valor único.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 12/01/2015 a las 14:46 Razón: Post-data
  #3 (permalink)  
Antiguo 13/01/2015, 02:10
Avatar de Carlos1975  
Fecha de Ingreso: mayo-2005
Mensajes: 29
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Seleccionar todos los checkbox y dar color al tr

Gracias gracias

He modificado mis funciones y comprobado en varios navegadores y todo perfecto.

Dejo el resultado de las funciones modificadas por si valiesen a otros usuarios.

Código Javascript:
Ver original
  1. function SelectElements() {
  2.     var checkGroup = document.getElementsByTagName("input"),
  3.         total = checkGroup.length, i;
  4.      
  5.     for (i = 0; i < total; i++) {
  6.         if (checkGroup[i].name == "check[]") {
  7.             checkGroup[i].checked = 1;
  8.             checkGroup[i].parentNode.parentNode.style.background = "#ffc";
  9.             document.select_form.select_id.value = 0;
  10.         }
  11.     }
  12. }
  13.  
  14. function DeselectElements() {
  15.     var checkGroup = document.getElementsByTagName("input"),
  16.         total = checkGroup.length, i;
  17.      
  18.     for (i = 0; i < total; i++) {
  19.         if (checkGroup[i].name == "check[]") {
  20.             checkGroup[i].checked = 0;
  21.             checkGroup[i].parentNode.parentNode.style.background = "#fff";
  22.             document.select_form.select_id.value = 0;      
  23.         }
  24.     }
  25. }

Gracias de nuevo fiera

Última edición por Carlos1975; 13/01/2015 a las 09:34

Etiquetas: checkbox, color, funcion, html, input, js, php, select
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 14:25.