Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Dadoo
    Registrato dal
    Nov 2001
    Messaggi
    411

    Selezione oggetto checkbox con layer dinamico .innerHTML

    Ragazzi, vi risulta che un array di checkbox abbia dei problemi quando viene passato un solo valore (tra l'altro in un layer)?

    Mi spiego meglio semplicemente.
    Ho un codice javascript che crea un array di checkbox e lo visualizza in un layer dinamico
    codice:
    var layerBox = document.getElementById("MioLayer");
    stringaHTML = "";
    stringaHTML +=  "<input type='checkbox'  name='checkboxMod[]' value='valore1'>"; 
    stringaHTML +=  "<input type='checkbox'  name='checkboxMod[]' value='valore2'>"; 
    stringaHTML +=  "<input type='checkbox'  name='checkboxMod[]' value='valore3'>"; 
    stringaHTML += "<input type='button' value='Cancella Selezionati' onclick='CancellaDettaglioMultiDaCheckBox(\"checkboxMod[]\")'>";
    layerBox.innerHTML = stringaHTML;
    layerBox.style.visibility = "Visible";
    layerBox.style.display="block";
    come vedete il pulsante 'Cancella Selezionati' chiama la funzione CancellaDettaglioMultiDaCheckBox:
    codice:
    function CancellaDettaglioMultiDaCheckBox(txtobjCB){
    //Qui viene passato l'oggeto checkbox (eg: "checkboxMod[]") in formato stringa creato nel layer
    chks = document.forms[0].elements[txtobjCB];
    for (var i=0;i<chks.length;i++){
    
    	if ( chks[i].checked ){
    	alert("selezionato: " + i);
    	contaModTot++;
    	}
    	
      }
    }
    Praticamente funziona tutto alla grande, nel senso che si riesce a ciclare gli elementi della checkbox che seleziono, nell'esempio iniziali ve ne ho messi 3... ma ho il problema quando l'elemento è uno soltanto:
    codice:
    var layerBox = document.getElementById("MioLayer");
    stringaHTML = "";
    stringaHTML +=  "<input type='checkbox'  name='checkboxMod[]' value='valore1'>"; 
    stringaHTML += "<input type='button' value='Cancella Selezionati' onclick='CancellaDettaglioMultiDaCheckBox(\"checkboxMod[]\")'>";
    layerBox.innerHTML = stringaHTML;
    layerBox.style.visibility = "Visible";
    layerBox.style.display="block";
    in questo caso la proprietà chks.length ritorna come valore undefined e non entra nel ciclo for....

    come mai ?

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    questo non dipende ne' dalla dinamicita' con cui scrivi i checkbox, ne' dal fatto che vengano scritti in un layer
    se hai piu' di un elemento con stesso nome rientra in un array, altrimenti non c'e' array per la cui lunghezza ciclare
    codice:
    chks = document.forms[0].elements[txtobjCB];
    if(chks.length){
      trattalo come un array
    }
    else {
      trattalo come un elemento singolo
    }
    ciao

  3. #3
    Utente di HTML.it L'avatar di Dadoo
    Registrato dal
    Nov 2001
    Messaggi
    411
    grazie Xinod,

    infatti è proprio quello che ho fatto.... avevo immaginato che fosse cosi ma non ne ero sicuro...
    pensavo che l'utilizzo delle parentesi quadre nel nome del campo checkbox [] riconducessero sempre ad un array, invece quando è uno solo è come se fosse un solo campo.

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.