Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Pasando un valor con una función javascript para filtro

Estas en el tema de Pasando un valor con una función javascript para filtro en el foro de Jquery en Foros del Web. Buenas estoy intentando poner un evento onclick para seleccionar una banderita y que me busque los elementos de ese pais. Con los colores lo he ...
  #1 (permalink)  
Antiguo 19/09/2013, 07:06
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 11 años, 6 meses
Puntos: 5
Pasando un valor con una función javascript para filtro

Buenas estoy intentando poner un evento onclick para seleccionar una banderita y que me busque los elementos de ese pais.
Con los colores lo he conseguido pero ahora me he pillado con las banderas, en teoría es lo mismo pero no consigo pasarle el valor adecuado a la función. Pego código para que se entienda mejor, pongo primero el ejemplo de la tabla de colores que funciona:

Este es mi filtro del color, q aunque es PHP mi duda está en la parte de javascript por eso lo he puesto en esta parte del foro:

Código PHP:
Ver original
  1. //Color
  2. $ColorFilter='';
  3.  
  4. if (isset ($_POST['colorcar'])) {
  5.     $ColorInput = $_POST['colorcar'];
  6. } elseif (isset( $_SESSION['filter']['colorcar'] )) {
  7.     $ColorInput = $_SESSION['filter']['colorcar'];
  8. } else {// Nothing
  9. }
  10.  
  11. if (isset($ColorInput)) {
  12.        
  13.     if ($ColorInput !=''){
  14.         $_SESSION['filter']['colorcar'] = $ColorInput;
  15.         if($DataFilter!="") {
  16.             $DataFilter .= " AND ";
  17.         }
  18.        
  19.         foreach ($arrColor as $CarColor) {
  20.             if ($CarColor["ClassColor"] == $ColorInput) {
  21.                 $ColorFilter = $CarColor["body_colorgroup_id"];
  22.             }
  23.         }
  24.         $DataFilter .= "Body_colorgroup_id = " . $ColorFilter ." ";
  25.     }
  26. }else {
  27.     $ColorInput = '';
  28. }

Esta es la parte del código donde creo la tabla de colores y la muestro por pantalla para que el usuario pueda clickear en el color que quiera:

Código PHP:
Ver original
  1. <label for="ColorInput"><?php echo $arrMainPage[$MainPageColor]["TextHeader"]; ?></label>
  2.                                 <table name="ColorInput" id="ColorsTable" >
  3.                                     <tr>
  4.                                     <?php  
  5.                                         $intCount = 1;
  6.                                         $intHalf =  count($arrColor)/2;
  7.                                            
  8.                                         foreach ($arrColor as $Color){
  9.                                            
  10.                                             if ($Color["body_colorgroup_id"] == $ColorFilter ) {
  11.                                     ?>          <td onclick="press(this)" name="ColorInput" id="selected-color" value="<?php echo $Color["body_colorgroup_id"]; ?>" class="<?php echo $Color["ClassColor"]; ?>" title="<?php echo $Color["colorDescription"]; ?>"></td>
  12.                                     <?php   } else {
  13.                                     ?>          <td onclick="press(this)" name="ColorInput"  value="<?php echo $Color["body_colorgroup_id"]; ?>" class="<?php echo $Color["ClassColor"]; ?>" title="<?php echo $Color["colorDescription"]; ?>"></td>
  14.                                     <?php   }  
  15.                                             if ($intCount >= $intHalf) {
  16.                                     ?>
  17.                                     </tr>
  18.                                     <tr>
  19.                                     <?php       $intHalf = $intHalf*2;
  20.                                             }  
  21.                                             $intCount++;
  22.                                         }
  23.                                     ?> 
  24.                                     </tr>
  25.                                 </table>                       
  26.                                 <input type="hidden" id="colorcar" name="colorcar" value="" />

Y esta es la función javascritp que me permite clickear con el evento onclick y cambia algunas características de la celda seleccionada, como el borde para que dé sensación d que estás seleccionando:

Código Javascript:
Ver original
  1. var cell = document.getElementById('selected-color');
  2.             if (cell) {
  3.                 press(cell);
  4.             }
  5.            
  6.             function press(obj) {
  7.                 obj.style.border = '3px solid black';
  8.                 if (cell != null && cell != obj){
  9.                     cell.style.border = '';
  10.                 }
  11.                 cell = obj;
  12.                 $("#colorcar").attr({
  13.                     value: cell.className
  14.                 })
  15.             }

Y si no me equivoco con la última parte de la función press en value le pasa el valor de la celda que en este caso es un color.

Bueno pues he intentado lo mismo para las banderitas de los paises, pero esta vez en vez d celdas con imágenes y no me funciona muy bien. Pego código a ver si veis donde me estoy equivocando, yo tengo una ligera idea.

Esta es la parte del filtro de paises:

Código PHP:
Ver original
  1. //Country
  2. $DataFilter='';
  3. $CountryFilter='';
  4.  
  5. if (isset ($_POST['CountryCar'])) {
  6.     $CountryInput = $_POST['CountryCar'];
  7. } elseif (isset( $_SESSION['filter']['CountryCar'] )) {
  8.     $CountryInput = $_SESSION['filter']['CountryCar'];
  9. } else {// Nothing
  10. }
  11.  
  12. if (isset($CountryInput)) {
  13.    
  14.     if ($CountryInput !=''){
  15.         $_SESSION['filter']['CountryCar'] = $CountryInput;
  16.         if($DataFilter!="") {
  17.             $DataFilter .= " AND ";
  18.         }
  19.        
  20.         foreach ($arrCountry as $CarCountry) {
  21.             if ($CarCountry["ClassCountry"] == $CountryInput) {
  22.                 $CountryFilter = $CarCountry["CountryCodePK"];
  23.             }
  24.         }
  25.         $DataFilter .= "Previous_ownerCountry = '" . $CountryFilter ."' ";
  26.     }  
  27. } else {
  28.     $CountryInput = '';
  29. }

Esto donde muestro por pantallla las banderas para que el usuario elija:

Código PHP:
Ver original
  1. <label for="CountryInput"><?php echo $arrMainPage[$MainPageCountry]["TextHeader"]; ?></label>
  2.                                 <div name="CountryInput" id="CountriesFlags">
  3.                                 <?php
  4.                                     foreach ($arrCountry as $Country){
  5.                                         if ($Country["CountryCodePK"] == $CountryFilter ) {
  6.                                 ?>          <img onclick="choose(this)" name="CountryInput" id="selected-country" value="<?php echo $Country["CountryCodePK"]; ?>" class="HeightFlags" title="<?php echo $Country["CountryDescription"]; ?>" src="<?php echo $Country["ClassCountry"]; ?>">
  7.                                 <?php   } else {
  8.                                 ?>          <img onclick="choose(this)" name="CountryInput" value="<?php echo $Country["CountryCodePK"]; ?>" class="HeightFlags" title="<?php echo $Country["CountryDescription"]; ?>" src="<?php echo $Country["ClassCountry"]; ?>">
  9.                                 <?php   }  
  10.                                     }
  11.                                 ?> 
  12.                                 </div>                     
  13.                                 <input type="hidden" id="CountryCar" name="CountryCar" value="" />

Y esta es la función de javascript que es la parte que peor domino y es donde creo que la estoy liando:

Código Javascript:
Ver original
  1. //Select a flag
  2.             var flag = document.getElementById('selected-country');
  3.             if(flag) {
  4.                 choose(flag);
  5.             }
  6.            
  7.             function choose(obj) {
  8.                 obj.style.border = '3px solid #006DCC';
  9.                 if (flag != null && flag != obj){
  10.                     flag.style.border = '';
  11.                 }
  12.                 flag = obj;
  13.                 $("#CountryCar").attr({
  14.                     value: flag.value
  15.                     //value: flag.valueName
  16.                     //value: flag.className
  17.                     //value: flag.src
  18.                     //value: flag.srcName
  19.                     //value: flag
  20.                     //value: flag.()
  21.                 })
  22.             }

Quizás tenga que cambiar lo de attr. que no sé muy bien como funciona sólo sé que para el anterior si que me funcionó pero era una clase, ahora le tengo que pasar el valor que viene dentro de value -> value="<?php echo $Country["CountryCodePK"]; ?> creo, pero no lo consigo.
Cuando pongo lo mismo que para los colores, es decir uso flag.className e imprimo por pantalla el valor de $CountryInput para ver que está cogiendo me sale que coge la clase HeightFlags.

Alguien me ayuda??

Muchas gracias.

Saludos.
  #2 (permalink)  
Antiguo 19/09/2013, 12:38
Avatar de andinog  
Fecha de Ingreso: febrero-2012
Mensajes: 50
Antigüedad: 12 años, 10 meses
Puntos: 6
Respuesta: Pasando un valor con una función javascript para filtro

Hola, hay algo que no entiendo, ¿estas usando jQuery?

Lo digo porque en una linea pones:

Código Javascript:
Ver original
  1. var cell = document.getElementById('selected-color');

y en otra linea pones

Código Javascript:
Ver original
  1. $("#colorcar").attr({
  2.                     value: cell.className
  3.                 })

En caso de que utilices jQuery, la forma de asignar un valor es

Código Javascript:
Ver original
  1. $('#colorcar').val(      valor     );

Saludos
__________________
"El que nada duda nada sabe"
Ser Programador
  #3 (permalink)  
Antiguo 20/09/2013, 08:06
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 11 años, 6 meses
Puntos: 5
Respuesta: Pasando un valor con una función javascript para filtro

Cita:
Iniciado por andinog Ver Mensaje
Hola, hay algo que no entiendo, ¿estas usando jQuery?

Lo digo porque en una linea pones:

Código Javascript:
Ver original
  1. var cell = document.getElementById('selected-color');

y en otra linea pones

Código Javascript:
Ver original
  1. $("#colorcar").attr({
  2.                     value: cell.className
  3.                 })

En caso de que utilices jQuery, la forma de asignar un valor es

Código Javascript:
Ver original
  1. $('#colorcar').val(      valor     );

Saludos
Hola Andinog, gracias por responder.

En cuanto a tu pregunta: en esa parte no estoy usando jquery, lo que hago en la primera sentencia es detectar si ha presionado la celda y recoger el valor de la celda presionada y luego lo paso a mi filtro para que entre en la base de datos con ese valor. De todas formas la parte del color funciona perfectamente, la había puesto como ejemplo por si servía de algo.

Ya he conseguido que me funcione la parte de las banderas tb, ahora sólo necesito que cuando se clickee en una que ya está seleccionada se deseleccione.

Pego la solución d lo que preguntaba.

Esta es la parte del filtro de país:

Código PHP:
Ver original
  1. //Country
  2. $DataFilter='';
  3. $CountryFilter='';
  4.  
  5. if (isset ($_POST['CountryCar'])) {
  6.     $CountryInput = $_POST['CountryCar'];
  7. } elseif (isset( $_SESSION['filter']['CountryCar'] )) {
  8.     $CountryInput = $_SESSION['filter']['CountryCar'];
  9. } else {// Nothing
  10. }
  11.  
  12. if (isset($CountryInput)) {
  13.    
  14.     if ($CountryInput !=''){
  15.         $_SESSION['filter']['CountryCar'] = $CountryInput;
  16.         if($DataFilter!="") {
  17.             $DataFilter .= " AND ";
  18.         }
  19.        
  20.         foreach ($arrCountry as $CarCountry) {
  21.             if ($CarCountry["ClassCountry"] == substr($CountryInput,-1*strlen($CarCountry["ClassCountry"]))) {
  22.                 $CountryFilter = $CarCountry["CountryCodePK"];
  23.             }
  24.         }
  25.         $DataFilter .= "Previous_ownerCountry = '" . $CountryFilter ."' ";
  26.     }  
  27. } else {
  28.     $CountryInput = '';
  29. }

Esta es la parte donde muestro las banderas por pantalla, que he pegado en el anterior post pero ahora está cambiado el código:

Código PHP:
Ver original
  1. <label for="CountryInput"><?php echo $arrMainPage[$MainPageCountry]["TextHeader"]; ?></label>
  2.                                 <div name="CountryInput" id="CountriesFlags">
  3.                                 <?php
  4.                                     foreach ($arrCountry as $Country){
  5.                                         if ($Country["ClassCountry"] == substr($CountryInput, -1*strlen($Country["ClassCountry"]))) {
  6.                                 ?>          <img onclick="choose(this)" name="CountryInput" id="selected-country" class="HeightFlags" title="<?php echo $Country["CountryDescription"]; ?>" src="<?php echo $Country["ClassCountry"]; ?>">
  7.                                 <?php   } else {
  8.                                 ?>          <img onclick="choose(this)" name="CountryInput" class="HeightFlags" title="<?php echo $Country["CountryDescription"]; ?>" src="<?php echo $Country["ClassCountry"]; ?>">
  9.                                 <?php   }  
  10.                                     }
  11.                                 ?> 
  12.                                 </div>                     
  13.                                 <input type="hidden" id="CountryCar" name="CountryCar" value="" />

Y esta es la parte de javascript que me permite seleccionar la bandera:

Código Javascript:
Ver original
  1. //Select a flag
  2.             var flag = document.getElementById('selected-country');
  3.             if(flag) {
  4.                 choose(flag);
  5.             }
  6.            
  7.             function choose(obj) {
  8.                 obj.style.border = '3px solid #006DCC';
  9.                 if (flag != null && flag != obj){
  10.                     flag.style.border = '';
  11.                 }
  12.                 flag = obj;
  13.                 $("#CountryCar").attr({
  14.                     value: flag.src
  15.                 })
  16.             }

Si os fijais en el value al final he puesto flag.src que es lo lógico ya que es una imagen, lo único que no me funcionaba porque me cogí toda la dirección de la imagen pero lo he solucionado con substr.

Espero que sirva a alguien.

Si a alguien se le ocurre cómo sería para clickear otra vez sobre el color o la bandera seleccionada y que se borre los bordes así como el valor pasado a SESSION si no es la primera búsqueda, estaría bien saberlo.

Muchas gracias.
  #4 (permalink)  
Antiguo 24/09/2013, 07:28
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 11 años, 6 meses
Puntos: 5
Respuesta: Pasando un valor con una función javascript para filtro

Ya lo he averiguado, dejo la solución por si le sirve a alguien:

Código Javascript:
Ver original
  1. //Select a flag
  2.             var flag = null;
  3.             var selectedFlag = document.getElementById('selected-country');
  4.             if(selectedFlag) {
  5.                 choose(selectedFlag);
  6.             }
  7.            
  8.             function choose(obj) {
  9.                 if (obj == flag){
  10.                     obj.style.border = '';
  11.                     flag = null;
  12.                     $("#CountryCar").attr({
  13.                         value: ''
  14.                     })
  15.                 } else {
  16.                     obj.style.border = '3px solid #006DCC';
  17.                     if (flag != null && flag != obj){
  18.                         flag.style.border = '';
  19.                     }
  20.                     flag = obj;
  21.                     $("#CountryCar").attr({
  22.                         value: flag.src
  23.                     })
  24.                 }  
  25.             }

Saludos.

Etiquetas: funcion, input, javascript, pasando, php, select, valor
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 13:31.