Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Trasferire elementi tra select multiple

    Ciao,
    ho visto in giro alcuni post riguardanti questo argomento ma anche usando quei risultati non ne son venuto a capo perchè secondo me c'è qualcosa che non va.
    Avrei trovato una soluzione semplice ma ci dev'essere qualcosa che non conosco riguardo allo stato "selected" di una option di una select, questa è la mia funzione:
    codice:
    function SetSelect(){
    	var origine = document.getElementById("dati_disp");
    	var destinazione = document.getElementById("dati_set");
    	for(i=0; i<origine.options.length;i++){
    		if(origine.options[i].selected){			
    			var elNew = document.createElement('option');
    				elNew.text = origine.options[i].text;
    				elNew.value = origine.options[i].value;
    
    			try {destinazione.add(elNew, null); } // standards compliant; doesn't work in IE		  
    			catch(ex) {destinazione.add(elNew); } // IE only	
    
    			origine.remove(i); // tolgo dalla prima					
    		}
    	}
    }
    Il problema è che non tutte le option che seleziono risultano effettivamente come selezionate al test, a cosa può essere dovuto ??
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  2. #2
    Raga ho risolto, vi spiego se dovesse servire a qualcun altro, il problema era dato dal "remove" della option:
    quando si elimina una option viene tolto un elemento dall'array e di conseguenza si spostano gli indici di tutti i successivi elementi !!
    La mia soluzione è quindi di usare due cicli, uno che prima inserisce gli elementi nella seconda select, il secondo che li toglie dalla prima...a ritroso.

    codice:
    	for(i=0; i<origine.options.length;i++){
    		if(origine.options[i].selected==true){	
    			var elNew = document.createElement('option');
    				elNew.text = origine.options[i].text;
    				elNew.value = origine.options[i].value;
    
    			try {destinazione.add(elNew, null); } // standards compliant; doesn't work in IE		  			
    			catch(ex) {destinazione.add(elNew); } // IE only					
    		} 
    	}
    	for(i=origine.options.length-1; i>=0;i--){
    		if(origine.options[i].selected==true)	
    			origine.remove(i);
    Magari c'è un metodo anche più veloce ... ma almeno ora funziona
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.