Foros del Web » Programando para Internet » Jquery »

Modificar un select individual (perteneciente a un array)

Estas en el tema de Modificar un select individual (perteneciente a un array) en el foro de Jquery en Foros del Web. Que tal gente, tengo un array de selects porque el usuario llena una especie de grilla. Con array me refiero a los clásicos: <input name="itemAncho[]"> ...
  #1 (permalink)  
Antiguo 04/11/2014, 21:15
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 17 años, 9 meses
Puntos: 4
Modificar un select individual (perteneciente a un array)

Que tal gente, tengo un array de selects porque el usuario llena una especie de grilla.

Con array me refiero a los clásicos: <input name="itemAncho[]">

En mi caso dependiendo del valor seleccionado de un select el otro va tomar x valor.

El problema que tengo es que no se como obtener el identificador (puede ser el orden) de el elemento seleccionado para luego modificar solo el otro select correspondiente y no todos los selects q pertenecen al array.

ej:

$(document).ready(function() {
$('[name="itemCalidad[]"]').change(function(){

obtener identificador del select itemCalidad seleccionado

var option = $('<option></option>').attr("value", "option value").text("Text");

modificar solo el select itemVidrio correspondiente al itemCalidad seleccionado (creria que mediante algun tipo de obtencion de orden de elemento)
$('[name="itemVidrio[]"]').empty().append(option);


});
});

Como lo hago ??? muchas gracias !
  #2 (permalink)  
Antiguo 05/11/2014, 11:52
 
Fecha de Ingreso: abril-2013
Mensajes: 60
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: Modificar un select individual (perteneciente a un array)

$("select").on("change",function(){
var sLabel = $(this).find("option:selected").text();
var sValue = $(this).find("option:selected").val();
alert(sValue +" - "+ sLabel);
});
  #3 (permalink)  
Antiguo 05/11/2014, 12:26
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Modificar un select individual (perteneciente a un array)

Podrías hacerlo así:

Código HTML:
Ver original
  1. <select name = "foo[]">
  2.     <option value = "foo 1">Foo 1</option>
  3.     <option value = "foo 2">Foo 2</option>
  4.     <option value = "foo 3">Foo 3</option>
  5.  
  6. <select name = "foo[]">
  7.     <option value = "foo 4">Foo 4</option>
  8.     <option value = "foo 5">Foo 5</option>
  9.     <option value = "foo 6">Foo 6</option>
  10.  
  11. <select name = "foo[]">
  12.     <option value = "foo 7">Foo 7</option>
  13.     <option value = "foo 8">Foo 8</option>
  14.     <option value = "foo 9">Foo 9</option>
  15.  
  16. <select name = "bar[]">
  17.     <option value = "bar 1">Bar 1</option>
  18.     <option value = "bar 2">Bar 2</option>
  19.     <option value = "bar 3">Bar 3</option>
  20.  
  21. <select name = "bar[]">
  22.     <option value = "bar 4">Bar 4</option>
  23.     <option value = "bar 5">Bar 5</option>
  24.     <option value = "bar 6">Bar 6</option>
  25.  
  26. <select name = "bar[]">
  27.     <option value = "bar 7">Bar 7</option>
  28.     <option value = "bar 8">Bar 8</option>
  29.     <option value = "bar 9">Bar 9</option>

Código Javascript:
Ver original
  1. var valor, texto, idx, equiv;
  2. $("[name^=foo]").on("change", function(){
  3.     valor = this.value; //El valor seleccionado
  4.     idx = this.selectedIndex; //El número de opción seleccionada
  5.     texto = this.options[idx].innerHTML; //El texto de la opción seleccionada
  6.     equiv = $("[name^=foo]").index(this); //El número de lista en la que se produjo el cambio
  7.     $("[name^=bar]")
  8.           .eq(equiv) //Busco a la lista equivalente
  9.           .find("option") //Tomo a sus opciones
  10.           .eq(idx) //Tomo a la opción equivalente
  11.           .val(valor) //Le asigno el valor
  12.           .text(texto) //Le asigno el texto
  13.           .prop("selected", true); //La dejo seleccionada
  14. });

Ahora, la explicación. Tenemos dos grupos de arrays de listas de tres listas cada una (pueden ser más o menos). En el código JS, declaro tres variables que usaré más adelante (las declaro al inicio para no tener que hacerlo en cada ocasión en la que seleccione una opción). Luego, cuando elija un valor de cualquiera de las listas cuyo nombre empiece por 'foo', ejecuto una función. En dicha función, tomo al valor seleccionado, al número de opción seleccionada (si son tres y selecciono a la segunda, el valor será 1, recordando siempre que se empieza a contar desde 0), el texto de la opción seleccionada y el número de lista con la que estamos trabajando actualmente (el mismo caso que el de las opciones). Luego, del conjunto de listas cuyo nombre empiece por 'bar', tomo a la equivalente con la lista actual, busco a sus opciones, tomo a la opción equivalente con la opción seleccionada en la primera lista y le asigno el valor y texto de la misma, además, la selecciono, quedan visible.

DEMO

Podrías hacerlo en más o menos pasos, pero decidí mostrarlo de esta manera para que se pueda entender con facilidad. Si tienes dudas, pregunta.

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
  #4 (permalink)  
Antiguo 16/11/2014, 17:15
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 17 años, 9 meses
Puntos: 4
Respuesta: Modificar un select individual (perteneciente a un array)

Cita:
Iniciado por Alexis88 Ver Mensaje
Podrías hacerlo así:

Código HTML:
Ver original
  1. <select name = "foo[]">
  2.     <option value = "foo 1">Foo 1</option>
  3.     <option value = "foo 2">Foo 2</option>
  4.     <option value = "foo 3">Foo 3</option>
  5.  
  6. <select name = "foo[]">
  7.     <option value = "foo 4">Foo 4</option>
  8.     <option value = "foo 5">Foo 5</option>
  9.     <option value = "foo 6">Foo 6</option>
  10.  
  11. <select name = "foo[]">
  12.     <option value = "foo 7">Foo 7</option>
  13.     <option value = "foo 8">Foo 8</option>
  14.     <option value = "foo 9">Foo 9</option>
  15.  
  16. <select name = "bar[]">
  17.     <option value = "bar 1">Bar 1</option>
  18.     <option value = "bar 2">Bar 2</option>
  19.     <option value = "bar 3">Bar 3</option>
  20.  
  21. <select name = "bar[]">
  22.     <option value = "bar 4">Bar 4</option>
  23.     <option value = "bar 5">Bar 5</option>
  24.     <option value = "bar 6">Bar 6</option>
  25.  
  26. <select name = "bar[]">
  27.     <option value = "bar 7">Bar 7</option>
  28.     <option value = "bar 8">Bar 8</option>
  29.     <option value = "bar 9">Bar 9</option>

Código Javascript:
Ver original
  1. var valor, texto, idx, equiv;
  2. $("[name^=foo]").on("change", function(){
  3.     valor = this.value; //El valor seleccionado
  4.     idx = this.selectedIndex; //El número de opción seleccionada
  5.     texto = this.options[idx].innerHTML; //El texto de la opción seleccionada
  6.     equiv = $("[name^=foo]").index(this); //El número de lista en la que se produjo el cambio
  7.     $("[name^=bar]")
  8.           .eq(equiv) //Busco a la lista equivalente
  9.           .find("option") //Tomo a sus opciones
  10.           .eq(idx) //Tomo a la opción equivalente
  11.           .val(valor) //Le asigno el valor
  12.           .text(texto) //Le asigno el texto
  13.           .prop("selected", true); //La dejo seleccionada
  14. });

Ahora, la explicación. Tenemos dos grupos de arrays de listas de tres listas cada una (pueden ser más o menos). En el código JS, declaro tres variables que usaré más adelante (las declaro al inicio para no tener que hacerlo en cada ocasión en la que seleccione una opción). Luego, cuando elija un valor de cualquiera de las listas cuyo nombre empiece por 'foo', ejecuto una función. En dicha función, tomo al valor seleccionado, al número de opción seleccionada (si son tres y selecciono a la segunda, el valor será 1, recordando siempre que se empieza a contar desde 0), el texto de la opción seleccionada y el número de lista con la que estamos trabajando actualmente (el mismo caso que el de las opciones). Luego, del conjunto de listas cuyo nombre empiece por 'bar', tomo a la equivalente con la lista actual, busco a sus opciones, tomo a la opción equivalente con la opción seleccionada en la primera lista y le asigno el valor y texto de la misma, además, la selecciono, quedan visible.

DEMO

Podrías hacerlo en más o menos pasos, pero decidí mostrarlo de esta manera para que se pueda entender con facilidad. Si tienes dudas, pregunta.

Saludos
Muchas gracias Alexis, la solución es genial y esta súper clara.

Ahora, la única pregunta que me queda es como hago para que funcione cuando mediante jquery se pueden agregar nuevas filas (en tu ejemplo, nuevos selects) de forma dinámica.

Es decir, cuando el usuario ve la pantalla, solo encuentra una fila (con el select que de cambiar puede generar cambios), pero puede ir agregando otras mediante un botón. El problema es que la función no funciona con estas nuevas filas adheridas dinamicamente por mas que tenga el mismo identificador.

Muchas gracias.
  #5 (permalink)  
Antiguo 17/11/2014, 01:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Modificar un select individual (perteneciente a un array)

En ese caso, hazlo así:

Código Javascript:
Ver original
  1. $(document).on("change", "[name^=foo]", function(){
  2.     //Las mismas instrucciones
  3. });

De esta forma, cuando en el documento (que nunca cambiará) se produzca el evento change, aplicas a los elementos cuyos nombres empiecen por 'foo', las instrucciones que te expliqué en mi respuesta anterior. Esto está estrechamente ligado al concepto de programación orientada a eventos.

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
  #6 (permalink)  
Antiguo 17/11/2014, 11:21
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 17 años, 9 meses
Puntos: 4
Respuesta: Modificar un select individual (perteneciente a un array)

Muchas gracias !!!!!!!

Etiquetas: modificar, 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 07:29.