Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    1,171

    prelevare pulsanti radio

    ho un elenco di pulsanti radio che prelevo da un database in due colonne:
    <radio name="tab" valore="1">valore <radio name="tab" valore="2">valore
    <radio name="tab" valore="3">valore <radio name="tab" valore="4">valore
    <radio name="tab" valore="5">valore <radio name="tab" valore="6">valore
    ecc...
    ho provato cosi a prelevare la radio cliccata cosi;

    for (i=0;i<document.form1.tab.length;i++)
    {
    if (document.form1.tab[i].checked)
    {
    break;
    }
    var tabella=document.form1.tab[i].value;
    }

    ma il valore che prelievo non corrisponde a quello selezionato.

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Intendevi <input type="radio" name="tab" value="1" /> immagino!
    • Non dichiarare una variabile (var [TUAVARIABILE]) all'interno di un ciclo. Dichiarala sempre insieme alla definizione del ciclo o prima.
    • Non puoi assegnare un valore dopo che è hai lanciato l'istruzione break!


    codice:
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Esempio</title>
    <script type="text/javascript">
    function prelevaValore() {
    	for (var iTabId = 0, tabella = null, nTabLen = document.form1.tab.length; iTabId < nTabLen; iTabId++) {
    		if (document.form1.tab[iTabId].checked) { tabella = document.form1.tab[iTabId].value; break; }
    	}
    	alert(tabella || "null: devi selezionare una checkbox!");
    }
    </script>
    
    </head>
    
    <body>
    						
    <form name="form1">
    
    
    <input type="radio" name="tab" value="valore1" />valore1
    
    <input type="radio" name="tab" value="valore2" />valore2
    
    <input type="radio" name="tab" value="valore3" />valore3
    
    <input type="radio" name="tab" value="valore4" />valore4
    
    <input type="radio" name="tab" value="valore5" />valore5
    
    <input type="radio" name="tab" value="valore6" />valore6</p>
    
    
    <span style="cursor:pointer;text-decoration:underline;color:#0000ff;" onclick="prelevaValore();">Preleva valore</span></p>
    </form>
    </body>
    </html>
    Metodi alternativi...
    codice:
    function prelevaValore() {
    	var iTabId = 0, tabella = null, nTabLen = document.form1.tab.length;
    	while (iTabId < nTabLen && !(tabella = document.form1.tab[iTabId].checked ? document.form1.tab[iTabId].value : false)) { iTabId++; }
    	alert(tabella || "null: devi selezionare una checkbox!");
    }
    (è meno performante)


  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    1,171
    ho pèrovato cosi:
    for (nTabId = 0, tabella = null; nTabId < document.form1.tab.length; nTabId++) {
    if (document.form1.tab[nTabId].checked) { tabella = document.form1.tab[nTabId].value; break; }
    }
    alert(tabella || "null: devi selezionare una checkbox!");

    ma non funziona.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    nTabId = 0, ci va il ;
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    @cavicchiandrea
    var iTabId = 0, tabella = null, nTabLen = document.form1.tab.length; è un'unica dichiarazione, non puoi mettere il ";".

  6. #6
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Così, giusto per completezza...

    codice:
    function prelevaValore() {
    	var iTabId = document.form1.tab.length - 1;
    	while (iTabId > -1 && !document.form1.tab[iTabId].checked) { iTabId--; }
    	var tabella = iTabId > -1 ? document.form1.tab[iTabId].value : null;
    	alert("Il valore selezionato \u00E8 " + (tabella || "null: devi selezionare una checkbox!"));
    }
    (vantaggi: vengono dichiarate meno variabili)

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    1,171
    cosi :
    for (nTabId = 0; tabella_val = null;nTabId < document.form1.tabella.length; nTabId++);
    mi da Errore previsto )-

  8. #8
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Ma perché devi modificare il mio esempio? Non ti funziona? Cos'è document.form1.tabella???

    P.S. Se hai a che fare con molti radiogroup, ti conviene creare una proprietà prototipale di nome selectedIndex e richiamarla alla bisogna. Così: document.tuoForm.tuoRadioGroup.selectedIndex (un po' quello che accade per le select, per intenderci)... Ti giro un codice di esempio:

    codice:
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Esempio</title>
    <script type="text/javascript">
    Object.defineProperty(NodeList.prototype, "selectedIndex", {
    	get: function() {
    		var nIndex = this.length - 1;
    		while (nIndex > -1 && !this[nIndex].checked) { nIndex--; }
    		return nIndex;
    	},
    	set: function(nNewIndex) {
    		if (isNaN(nNewIndex)) { return; }
    		var nOldIndex = this.selectedIndex;
    		if (nOldIndex > -1) { this[nOldIndex].checked = false; }
    		this[nNewIndex].checked = true;
    	},
    	enumerable : true,
    	configurable : false
    });
    
    function prelevaValore() {
    	alert("Il valore selezionato \u00E8 " + document.form1.tab[document.form1.tab.selectedIndex].value);
    }
    </script>
    
    </head>
    
    <body>
    						
    <form name="form1">
    
    
    <input type="radio" name="tab" value="valore1" />valore1
    
    <input type="radio" name="tab" value="valore2" />valore2
    
    <input type="radio" name="tab" value="valore3" checked />valore3
    
    <input type="radio" name="tab" value="valore4" />valore4
    
    <input type="radio" name="tab" value="valore5" />valore5
    
    <input type="radio" name="tab" value="valore6" />valore6</p>
    
    
    <span style="cursor:pointer;text-decoration:underline;color:#0000ff;" onclick="prelevaValore();">Preleva valore</span></p>
    </form>
    </body>
    </html>
    Il fatto che la proprietà viene creata anche per tutte le NodeList che non sono composte prettamente da radio non è un problema: qualora venisse richiamata su altre NodeList darebbe come risultato -1 (anche se partirebbe comunque un ciclo su tutta la NodeList). Ma del resto... perché richiamare la proprietà selectedIndex su una collezione di div, mi domando?

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    1,171
    preferisco utilizzare questa:

    for (var nTabId=0;tabella=null;nTabId < document.form1.tab.length);nTabId++; {
    if (document.form1.tab[nTabId].checked)
    { tabella_val = document.form1.tab[nTabId].value;
    break;
    }

    if (tabella="null"){
    alert("seleziona un valore!");
    return false;
    }
    }

    mi da questo errore:
    impossibile utilizzare break all'interno di un ciclo.

  10. #10
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Per prima cosa devi mettere la virgola, non il punto e virgola, altrimenti ti darà errore (e infatti vedo che per aggirare l'errore hai messo nTabId++ fuori dalla parentesi... argggh cavicchiandrea!!!):

    codice:
    for (var iTabId = 0, tabella = null; iTabId < document.form1.tab.length; iTabId++) {
    	if (document.form1.tab[iTabId].checked) { tabella = document.form1.tab[iTabId].value; break; }
    }
    
    if (!tabella} { alert("seleziona un valore!"); return false; }
    In rosso le modifiche. Sei gentilmente pregato di copiarlo PARO PARO!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.