Foros del Web » Programando para Internet » Jquery »

JQuery - No repetir valores en input

Estas en el tema de JQuery - No repetir valores en input en el foro de Jquery en Foros del Web. Tengo un input tipo texto donde ya se encuentran unos valores separados por comas: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original value="1,2,3,4,5" Por otra caja de ...
  #1 (permalink)  
Antiguo 28/05/2011, 05:36
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
JQuery - No repetir valores en input

Tengo un input tipo texto donde ya se encuentran unos valores separados por comas:
Código HTML:
Ver original
  1. value="1,2,3,4,5"
Por otra caja de texto vacía donde introduzco más valores y los adiciona al primer input luego de presionar un botón Agregar. Por ejemplo, si escribo 6,7,8 en el segundo input y luego hago clic en el botón, el primer input quedaría así:
Código HTML:
Ver original
  1. value="1,2,3,4,5,6,7,8"
Hasta ahí todo bien.

Mi duda es sobre cómo hacerle para que no se repitan valores, es decir, que si escribo 1,2,3,6 retorne false para los primeros números y true para 6. Imagino que es como una intersección de datos de ambos inputs pero ni idea sobre cómo proceder.
  #2 (permalink)  
Antiguo 28/05/2011, 05:53
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: JQuery - No repetir valores en input

Puedes crear una función que te realice la intersección y te devuelva el resultado:

Código Javascript:
Ver original
  1. function interseccion(texto1,texto2){
  2.  
  3.    
  4.     array1 = texto1.split(",");
  5.    
  6.     $.each(texto2.split(","),function (ind,valor){
  7.       if (array1.indexOf(valor)==-1)
  8.        array1.push(valor);
  9.     });
  10.     alert("Nuevo array: "+array1);
  11.     return array1.toString();
  12. }
  13.  
  14.  
  15. interseccion("2,3,4,5,6","3,5,6,7,6,5,3,5,1");

La función devuelve la cadena de texto sin datos repetidos

Última edición por alexg88; 28/05/2011 a las 06:02
  #3 (permalink)  
Antiguo 28/05/2011, 06:39
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: JQuery - No repetir valores en input

Que tal metacortex,

La intersección serian los elementos comunes a los dos arrays, lo que tu quieres es un unique me parece, en cualquier caso jQuery no tiene prácticamente nada para el manejo de arrays, vas a tener que construirlo, de phpjs.org puedes obtener las funciones.

Una opción diferente a la que te comenta alexg88, seria hacer un concat de los arrays y luego aplicarle un array_unique.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 28/05/2011, 09:45
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años, 1 mes
Puntos: 66
Respuesta: JQuery - No repetir valores en input

puedes usar algo asi:

Código Javascript:
Ver original
  1. val = '1,2,3,4,5,6';
  2. val2 = '6,1,2,7,8';
  3.  
  4. valores = val.split(',');
  5. newValores = val2.split(',');
  6. for(index in newValores){
  7.     v = newValores[index];
  8.     if(valores.indexOf(v) == -1){//si no se encuentra ese valor
  9.         valores.push(v);
  10.     }
  11. }
  12. val = valores.join(',');
  13. console.log(val)//para que veas el resultado en la consola
  14.  
  15. EDITO: no habia visto el post anterior, esto es muy parecido a lo que ya te habian puesto por alla arriba ^^
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #5 (permalink)  
Antiguo 28/05/2011, 10:06
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: JQuery - No repetir valores en input

Qué buen enlace masterpuppet!! La analogía con PHP ayudará mucho a comprender mejor javascript. Creo que has reducido mi tiempo de aprendizaje a un tercio jejeje. Gracias hermano.

Respecto al .unique() así es, estuve intentando un buen rato con éste pero al final me decanté por la solución de alexg88, la cual me resulta bastante viable hasta el momento, ya que en la salida interseccion(...) puedo introducir los valores como strings. Gracias alexg88. De hecho pude ver varios ejemplos similares por ahí que hacen lo mismo, pero tu código es más pequeño y va más al grano .

El asunto es éste: se trata de un sortable hecho con JQuery UI. El problema que enfrentaba con los valores de ambos campos era que también debía refrescar el html y el contenido del input al pulsar el botón. Quedó 100% funcional, éste es el código resultante:

Código Javascript:
Ver original
  1. function interseccion( texto1 , texto2 ) {
  2.         array1 = texto1.split(",");
  3.  
  4.         $.each(texto2.split(",") , function (ind , valor) {
  5.             if (array1.indexOf(valor) == -1)
  6.                 array1.push(valor);
  7.         });
  8.  
  9.     return array1; // le quité el toString porque lo necesito como un array
  10.     }
  11.  
  12.  
  13.     $("#agregar").click(function () {
  14.         $( "#sortable" ).empty();
  15.  
  16.         var valor2 = '';
  17.         var coco = interseccion($("#select-result").val() , $("#resultado-agregar").val());
  18.  
  19.         for (i = 0; i < coco.length; i++) {
  20.             $( "#sortable" ).append('<li class="ui-state-default" id="widget-' + coco[i] + '">' + coco[i] + '<input type="checkbox" class="check" id="eliminar-' + coco[i] + '" /><\/li>');
  21.  
  22.             valor2 += coco[i];
  23.  
  24.             if (i < coco.length - 1) {
  25.                 valor2 += ',';
  26.             }
  27.         }
  28.  
  29.         $('#select-result').val(valor2);
  30.     });
En el proyecto, el input viene con datos. Así que con el click les asigno un nuevo valor que reemplaza los existentes. Igual se destruye/reconstruye el html dentro de #sortable. Eso solucionó el problema.

Tredio, tienes razón, el código se parece al de alexg88. Pero es importante porque demuestra por dónde debe ir el asunto. Gracias hombre.

PD: Les paso karma mañana amigos! (Esta mañana agoté la cuota de hoy) Gracias por todo.
  #6 (permalink)  
Antiguo 28/05/2011, 17:05
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: JQuery - No repetir valores en input

No me refería a unique de jQuery(solo funciona con los elementos DOM), sino a implementar un unique, algo así(no recuerdo la fuente):

Código Javascript:
Ver original
  1. Array.prototype.unique = function() {
  2.   var a = [];
  3.   var l = this.length;
  4.   for(var i = 0; i < l; i++) {
  5.     for(var j = i + 1; j < l; j++) {
  6.       if (this[i] === this[j])
  7.         j = ++i;
  8.       }
  9.       a.push(this[i]);
  10.     }
  11.     return a;
  12. }

Y podrías cachear los elementos antes del click, sino en cada click estas haciendo un traverse del DOM, tienes que tener en cuenta lo que significa el $, mira el for, estas haciendo un traverse en cada iteración, podrías hacer algo así:

Código Javascript:
Ver original
  1. //ready
  2. var sortable = $('#sortable');
  3. var select   = $('#select-result');
  4. var add      = $('#resultado-agregar');
  5.  
  6. $("#agregar").click(function () {
  7.  
  8.     sortable.empty();
  9.  
  10.     var ids   = select.val().split(',').concat(add.val().split(',')).unique();
  11.  
  12.     for (var i = 0; i < ids.length; i++) {
  13.         sortable.append('<li class="ui-state-default" id="widget-' + ids[i] + '">' + ids[i] +
  14.                         '<input type="checkbox" class="check" id="eliminar-' + ids[i] + '" ></li>');
  15.     }
  16.  
  17.     select.val(ids.join(','));
  18.  
  19. });

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 29/05/2011, 09:49
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: JQuery - No repetir valores en input

Cita:
Iniciado por masterpuppet Ver Mensaje
No me refería a unique de jQuery(solo funciona con los elementos DOM), sino a implementar un unique, algo así(no recuerdo la fuente):
Ahh ahora entiendo jejej. Lo que pasa es que hablas con un nuevo en la materia. Leo "unique" y la neurona me dice "JQuery" =P

Efectivamente el código también cumple la tarea, con la diferencia de que cuando agregas valores existentes en el primer input, los reorganiza con el clic del botón.

Etiquetas: input, repetir
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 16:12.