Visualizzazione dei risultati da 1 a 8 su 8

Discussione: select dinamiche

  1. #1
    Utente di HTML.it L'avatar di Angarat
    Registrato dal
    Nov 2003
    Messaggi
    157

    select dinamiche

    Salve a tutti,
    premetto che le due select vengono create tramite due query php/mysql, a priori non so quante option contengono.
    il problema è che scegliendo dalla prima devo modificare la seconda solo se il value della prima è uguale al label della seconda.
    codice:
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="JavaScript">
    	function pippo() {
    		var sc=document.modulo.cat.options[document.modulo.cat.selectedIndex].value;
    		labella = new Array();
    		var = document.modulo.sotto_cat.options.length;
    		for (cont=0;cont<=aa;cont++){
    			labella[cont] = document.modulo.sotto_cat.options[cont].label;
    			if (labella[cont]!=sc) {
    				document.modulo.sotto_cat.options[cont] = null;	
    			} 
    		}
    	}
    </script>
    </head>
    
    <body>
    <form name="modulo" id="modulo" action="" method="post">
    Categoria di appartenenza: <select name=cat id=cat onChange="pippo()"> 
    <option value='7'>categoria: 1</option>
    <option value='6'>categoria: 2</option>
    <option value='5'>categoria: 3</option>
    <option value='4'>categoria: 4</option>
    <option value='3'>categoria: 5</option>
    <option value='2'>categoria: 6</option>
    </select>
    Sottocategoria di appartenenza: <select name=sotto_cat id=sotto_cat>
    <option  label='7' value='1' >sottocategoria: 1</option>
    <option  label='7' value='13' >sottocategoria: 2</option>
    <option  label='7' value='3' >sottocategoria: 3</option>
    <option  label='5' value='5' >sottocategoria: 4</option>
    <option  label='5' value='6' >sottocategoria: 5</option>
    <option  label='4' value='10' >sottocategoria: 6</option>
    <option  label='4' value='11' >sottocategoria: 7</option>
    <option  label='4' value='7' >sottocategoria: 8</option>
    <option  label='2' value='4' >sottocategoria: 9</option>
    <option  label='2' value='12' >sottocategoria: 10</option>
    <option  label='3' value='14' >sottocategoria: 11</option>
    <option  label='3' value='15' >sottocategoria: 12</option>
    <option  label='6' value='16' >sottocategoria: 13</option>
    <option  label='6' value='17' >sottocategoria: 14</option>
    </select>
    </form>
    </body>
    </html>
    con questo metodo riesco a modificare solo parzialmente la seconda select
    grazie mille in anticipo!!!! VVoVe:

  2. #2
    Utente di HTML.it L'avatar di Angarat
    Registrato dal
    Nov 2003
    Messaggi
    157
    Nessuno???

  3. #3
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ci sono alcuni errori di concetto
    il limite del ciclo, dal momento che non vai a ricalcolarlo ogni volta, non e' valido se cambi la lunghezza dell' array nel ciclo stesso

    in pratica se cambi cosi' almeno non hai l' errore
    for (cont=0;cont<document.modulo.sotto_cat.options.len gth;cont++){

    ma soprattutto, andando a distruggere tutte le option che non corrispondono alla mia prima scelta non ho mai possibilita' di effettuare una scelta diversa! sarebbe voluto questo comportamento?

  4. #4
    Utente di HTML.it L'avatar di Angarat
    Registrato dal
    Nov 2003
    Messaggi
    157
    mille grazie per la risposta,
    hai ragione, infatti doveva essere il passo sucessivo poter cambiare idea (per me la programmazzione è come il cinese)

    mi sono accorto di un errore fra i vari anche di copia e incolla
    codice:
    var = document.modulo.sotto_cat.options.length;
    è invece
    codice:
    var aa = document.modulo.sotto_cat.options.length;
    ho provato come dici tu ma non mi funzia:
    ad esempio: se io seleziono la categoria: 6
    l'altro select dovrebbe darmi solo le sottocategorie 9 e 10...
    ho provato varie strade ma senza risultato.
    fondalmentalmente la soluzione sarebbe modificare la 2° query php/mysql (secondo select) a seconda della scelta del primo select che proviene dalla 1° query php/mysql, il problema è che php lavora prima di js e mi restituisce una query vuota.

    vorrei solo nascondere le opzioni non desiderate nella 2° select avendo comunque la possibilità di cambiare ìdea e scegliere un'altra opzione dlla prima e cosi di seguito, tieni presente che non conosco a priori quante opzioni ho nelle due select.

  5. #5
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    codice:
    <html>
    <head>
    <script>
    var labella = new Array('7','1','sottocategoria: 1',
    			'7','13','sottocategoria: 2',
    			'7','3','sottocategoria: 3',
    			'5','5','sottocategoria: 4',
    			'5','6','sottocategoria: 5',
    			'4','10','sottocategoria: 6',
    			'4','11','sottocategoria: 7',
    			'4','7','sottocategoria: 8',
    			'2','4','sottocategoria: 9',
    			'2','12','sottocategoria: 10',
    			'3','14','sottocategoria: 11',
    			'3','15','sottocategoria: 12',
    			'6','16','sottocategoria: 13',
    			'6','17','sottocategoria: 14'
    		);
    
    	function pippo() {
    		var sc=document.modulo.cat.options[document.modulo.cat.selectedIndex].value;
    		var obj = document.modulo.sotto_cat.options;
    		var aa = obj.length;
    		for (cont=aa;cont>0;cont--){
    			obj[cont-1] = null;	
    		} 
    		for (cont=0;cont<(labella.length/3);cont++){
    			if (labella[cont*3]==sc) 
    				obj[obj.length] = new Option(labella[cont*3+2],labella[cont*3+1]);	
    		}
    	}
    </script>
    </head>
    
    <body>
    <form name="modulo" id="modulo" action="" method="post">
    Categoria di appartenenza: <select name=cat id=cat onChange="pippo()"> 
    <option value='7'>categoria: 1</option>
    <option value='6'>categoria: 2</option>
    <option value='5'>categoria: 3</option>
    <option value='4'>categoria: 4</option>
    <option value='3'>categoria: 5</option>
    <option value='2'>categoria: 6</option>
    </select>
    Sottocategoria di appartenenza: <select name=sotto_cat id=sotto_cat>
    <option  label='7' value='1' >sottocategoria: 1</option>
    <option  label='7' value='13' >sottocategoria: 2</option>
    <option  label='7' value='3' >sottocategoria: 3</option>
    <option  label='5' value='5' >sottocategoria: 4</option>
    <option  label='5' value='6' >sottocategoria: 5</option>
    <option  label='4' value='10' >sottocategoria: 6</option>
    <option  label='4' value='11' >sottocategoria: 7</option>
    <option  label='4' value='7' >sottocategoria: 8</option>
    <option  label='2' value='4' >sottocategoria: 9</option>
    <option  label='2' value='12' >sottocategoria: 10</option>
    <option  label='3' value='14' >sottocategoria: 11</option>
    <option  label='3' value='15' >sottocategoria: 12</option>
    <option  label='6' value='16' >sottocategoria: 13</option>
    <option  label='6' value='17' >sottocategoria: 14</option>
    </select>
    </form>
    </body>
    </html>
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  6. #6
    Utente di HTML.it L'avatar di Angarat
    Registrato dal
    Nov 2003
    Messaggi
    157
    Hey molte grazie funge che è un piacere (mi ci vorrà una settimana per capirci qualcosa!!!), ma non ho risolto il problema: io non so cosa c'è dentro la seconda select (quella di labella) potrebbero esserci anche 300 option e non so cosa contenga la prima select. Quelle due select sono solo di esempio.

    il codice originale per creare la seconda select:

    codice:
    Sottocategoria di appartenenza: <select name=sotto_cat id=sotto_cat >
    <?php 	
    $q_scat = "SELECT * FROM cat WHERE id_sez=2 ORDER BY id_cat DESC";
    $t_scat = mysql_query($q_scat) or die("Errore nella query: " . mysql_error());
    while ($r_scat = (mysql_fetch_array($t_scat)) ) {
    	echo "<option label='".$r_scat[id_cat]."' value='".$r_scat[id_sotto_cat]."'>".$r_scat[desc_sotto_cat]."</option>\n";
    }	
    ?>
    </select>
    questo mi scrive:

    codice:
    Sottocategoria di appartenenza: <select name=sotto_cat id=sotto_cat>
    <option  label='7' value='1' >sottocategoria: 1</option>
    <option  label='7' value='13' >sottocategoria: 2</option>
    <option  label='7' value='3' >sottocategoria: 3</option>
    <option  label='5' value='5' >sottocategoria: 4</option>
    <option  label='5' value='6' >sottocategoria: 5</option>
    <option  label='4' value='10' >sottocategoria: 6</option>
    <option  label='4' value='11' >sottocategoria: 7</option>
    <option  label='4' value='7' >sottocategoria: 8</option>
    <option  label='2' value='4' >sottocategoria: 9</option>
    <option  label='2' value='12' >sottocategoria: 10</option>
    <option  label='3' value='14' >sottocategoria: 11</option>
    <option  label='3' value='15' >sottocategoria: 12</option>
    <option  label='6' value='16' >sottocategoria: 13</option>
    <option  label='6' value='17' >sottocategoria: 14</option>
    </select>
    dovrei caricare l'array labella in modo automatico una roba del tipo (ovviamente non funzia):
    codice:
    	var labella = new Array;
    
    	for (y=1;y<=document.modulo.sotto_cat.option.length;y++){
    		labella[y]=(document.modulo.sotto_cat.option[y].label,document.modulosotto_.cat.option[y].value,document.modulo.sotto_cat.option[y].text);
    	}
    mi sono perso nel nuovo mondo js!!!!!! ormai vedo array anche di notte

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Perdona la mia ignoranza riguardo al linguaggio che usi lato server... dal quale ovviamente potresti far scrivere l'intero array in javascript
    codice:
    <script>
    var labella = new Array(
    <?php
    while ($r_scat = (mysql_fetch_array($t_scat)) ) {
    	echo "'".$r_scat[id_cat]."','".$r_scat[id_sotto_cat]."','".$r_scat[desc_sotto_cat]."',";
    }	
    ?>
    '');
    // resto dello script in js
    unico accorgimento: non considerare l'elemento vuoto aggiunto in coda all'array:
    codice:
    	for (cont=0;cont<(parseInt(labella.length/3));cont++){
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    Utente di HTML.it L'avatar di Angarat
    Registrato dal
    Nov 2003
    Messaggi
    157
    Se tutti fossero ignoranti come te!!!!

    Veramente molte grazie, io neanche riuscivo a creare l'array in javascript. Funge che è un gioiello!!!!!!!


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.