elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Resuelto] select2 cambiar valor de lista dinamica con jquery
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] select2 cambiar valor de lista dinamica con jquery  (Leído 5,331 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
[Resuelto] select2 cambiar valor de lista dinamica con jquery
« en: 22 Abril 2016, 23:16 pm »

Me acaba de dar cuenta de que uno de mis scripts no funciona correctamente. Se trata de 2 de las 3 listas que tengo para seleccionar provincia, ciudad y zona.

La primera lista al no ser dinamica simplemente uso change() para que select2 sepa que el valor ha cambiado y lo refleje (tanto el placeholder como el valor de la lista en sí).

En el caso de las otras dos listas, es algo increible... cada vez que refresco (F5) la página, estas dos listas hacen algo distinto... no sé si es porque son dinamicas, pero no funciona.

Buscando en google he visto que para estos casos se usa la función trigger('change'); y opcionalmente se vuelve a instanciar select2 en el elemento antes de cambiar el valor. Lo estoy haciendo pero sigue sin funcionar:

Tengo un botón para cada lista que muestra con un alert el valor actual de cada lista. La segunda lista a veces muestra el valor y otras no, la tercera siempre muestra 0...

  • El placeholder cambia (puedo ver el nombre de la ciudad/zona), pero al abrir la lista la opción seleccionada es la primera (valor 0).
  • En el caso de la tercera lista (zonas), a veces llega a no suceder absolutamente nada. Otras simplemente cambia el placeholder pero el valor sigue siendo 0.

Código
  1. $(function () {
  2.  
  3.    var province        = <?php echo $province; ?>,
  4.        city            = <?php echo $city; ?>,
  5.        zone            = <?php echo $zone; ?>;
  6.  
  7.    // province
  8.    $('select[name="location[province]"]').val(province).change();
  9.  
  10.    // city
  11.    content = '/get?op=1&id=' + province + '&list=1&admin=1';
  12.    $('select[name="location[city]"]').load(content, function() {
  13.        $(this).select2(); // reinstanciar el plugin
  14.        $(this).val(city).trigger('change');
  15.    });
  16.  
  17.    // zone
  18.    content = '/get?op=1&id=' + city + '&list=2&admin=1';
  19.    $('select[name="location[zone]"]').load(content, function() {
  20.        $(this).select2();
  21.        $(this).val(zone).trigger('change');
  22.    });
  23.  
  24. });

Las tres variables están bien, abro el código fuente de la página y puedo ver que cada una tiene el número (entero).

¿Alguien sabe cual puede ser el problema?

Gracias!


« Última modificación: 24 Abril 2016, 01:08 am por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: select2 cambiar valor de lista dinamica con jquery
« Respuesta #1 en: 22 Abril 2016, 23:40 pm »

La primera lista al no ser dinamica simplemente uso change() para que select2 sepa que el valor ha cambiado y lo refleje (tanto el placeholder como el valor de la lista en sí).

¿Placeholder? Los selects no tienen placeholders.

En el caso de las otras dos listas, es algo increible... cada vez que refresco (F5) la página, estas dos listas hacen algo distinto... no sé si es porque son dinamicas, pero no funciona.

¿Que no funciona?

No se que haga tu plugin (select2) o que acciones tengas registradas para change en tus selects.


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: select2 cambiar valor de lista dinamica con jquery
« Respuesta #2 en: 23 Abril 2016, 03:03 am »

Perdon, en otros foros (en ingles como stackoverflow) vi que se referian al nombre que muestra la lista como placeholder y me confundí. Yo me refiero a la opción seleccionada, en la lista aparece el nombre de la ciudad/zona seleccionada pero cuando abro la lista la opción seleccionada es la primera y el valor es 0, aunque se está mostrando el nombre... algo raro del plugin.

Select2 permite hacer muchisimas cosas, entre otras permite buscar y añadir nuevas opciones a la lista, así es como lo inicializo:

Código
  1. $('.location select').select2();
  2. $('.location select[name="location[city]"], .location select[name="location[zone]"]').select2({
  3.    tags: true,
  4.    createTag: function (params) {
  5.        return {
  6.        id: params.term,
  7.        text: params.term,
  8.        newOption: true
  9.        }
  10.    },
  11.    templateResult: function (data) {
  12.        var $result = $("<span></span>");
  13.  
  14.        $result.text(data.text);
  15.  
  16.        if (data.newOption) {
  17.        $result.append(" <em>(nuevo)</em>");
  18.        }
  19.  
  20.        return $result;
  21.    }
  22. });

Pero creo que se trata de un fallo de la versión del select2 que no detecta correctamente el cambio de valor y no lo realiza. Abriré un issue en el repositorio.

EDITO: Vale ya he encontrado el problema. Al hacer el trigger change, se hacia tambien el on change que se encarga de popular las listas. Un peligroso conflicto de intereses, no volverá a pasar  ;D

EDITO 2: Dejo la respuesta por si alguien usa este plugin, hay que hacer que sea solo select2 el que active el change y no jquery: .trigger('change.select2'); de esta manera change() solo se produce en la instancia de select2.
« Última modificación: 24 Abril 2016, 01:50 am por gAb1 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Lista Dinamica en Java
Java
ALEJO007 1 2,595 Último mensaje 14 Enero 2005, 04:41 am
por Ragnarok
lista dinamica
Java
brian_e 8 13,442 Último mensaje 6 Mayo 2009, 02:15 am
por thurgrim
función jQuery devolver valor
Desarrollo Web
Psyke1 4 6,836 Último mensaje 21 Mayo 2012, 18:55 pm
por Psyke1
Jquery variable dinamica en capa
Desarrollo Web
OssoH 1 1,901 Último mensaje 17 Junio 2014, 13:47 pm
por OssoH
enviar mas de una valor por $() Jquery
Desarrollo Web
Slikp 6 3,618 Último mensaje 31 Octubre 2014, 00:20 am
por NaSaRiD15
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines