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

    javascript problema selezione multipla checkbox

    Salve a tutti,

    Ho una pagina php che tramite una funzione carica dinamicamente N checkbox.
    Poi ho inserito un altra checkbox che se selezionata, mi seleziona tutte le checkbox presneti nella pagina, e fino a qui tutto funziona!
    Poi ho un tasto conferma che scrive nel db tutte i record con checkbox selezionato.


    Questa è il codice che utilizzo quando carico dinamicamente le N checkbox:
    codice:
    echo "<div id='DIVcheckbox$ricID' class='checker'><span class='' >";
    echo "<input class='checkbox1' type='checkbox'  id='checkConferme$ricID' name='checkConferme[]'  value='$ricID' onclick='checkME(this, $ricID)'>";
    echo "</span></div>";
    Questo è il codice del tasto:
    codice:
    echo "<div class='button' title='Conferma Selezionati' onclick=\"confermaTutti(document.forms['formric'].elements['checkConferme[]']);\"><span>Conferma</span></div>";
    e questo è il codice Javascript che controlla tutte le checkbox selezionate ed esegue le operazioni in base alle checkbox selezionate.
    codice:
    function confermaTutti(arrayCheckBox){
        
        var conta=0;
        
        for(var i=0;i<arrayCheckBox.length;i++){
            if(arrayCheckBox[i].checked){
                    conta++;
                }
            }
        
        if(conta==0){
            alert('ERRORE!\nDevi selezionare almeno un elemento');
            return false;
        }    
            
        
        for(var n=0; n<arrayCheckBox.length;n++){
            if(arrayCheckBox[n].checked){
        
                var id = arrayCheckBox[n].value;
                var campo = "start_ts"; 
                var valore = "start_tsConfTXT" + id;
                    
                inseriscieffettivi(id, campo, document.getElementById(valore).value);
                
            }
        }
    
        $('#DIVselecctall span').removeClass('checked'); 
    }
    Il problema mio è che se ho solo una checkbox da selezionare all'interno della pagina non crea l'array e quindi il parametro arrayCheckBox passato alla funzione javascript risulta essere null!

    Se invece ci sono più checkbox da selezionare e le selezione più di una o anche solo 1 non mi da questo errore!

    Spero di essere stato chiaro.
    Grazie per il supporto.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    verifica che siano presenti più di un checkbox prima di generare l'array if(arrayCheckBox.length > 0)...
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Le stai generando lato server... dove le puoi agevolmente contare e di conseguenza inviare un diverso script a seconda dei casi
    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

  4. #4
    Grazie per la risposta.
    Ma il problema è che quando seleziono solo una checkbox non passa nulla alla funzione javascript, e se faccio un alert tipo:
    alert(arrayCheckBox);

    mi restituisce "UNDEFINED"

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Il concetto non cambia, verifica che la variabile conta sia superiore ad uno, in questo caso popolerai l'array altrimenti userai il dato singolo
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    arrayCheckBox non è un array quando c'è un solo checkbox nella pagina, è un html object e non ha la proprietà length, potresti aggiungere un controllo prima dei cicli, qualcosa del genere:

    codice:
    if(inputArrayCheckBox.length){
        arrayCheckBox = inputArrayCheckBox;
      }else{
        arrayCheckBox = [];
        arrayCheckBox[0] = inputArrayCheckBox;
      }
    dove inputArrayCheckBox è l'input della funzione confermaTutti

  7. #7
    Quote Originariamente inviata da Vindav Visualizza il messaggio
    arrayCheckBox non è un array quando c'è un solo checkbox nella pagina, è un html object e non ha la proprietà length, potresti aggiungere un controllo prima dei cicli, qualcosa del genere:

    codice:
    if(inputArrayCheckBox.length){
        arrayCheckBox = inputArrayCheckBox;
      }else{
        arrayCheckBox = [];
        arrayCheckBox[0] = inputArrayCheckBox;
      }
    dove inputArrayCheckBox è l'input della funzione confermaTutti

    Grazie mille, funziona tutto.

    Solo che ora, se clicco sul tasto senza selezionare alcuna checkbox non mi appare l'alert che devo selezionare almeno una checkbox?

    ecco il mio codice:

    codice:
    function confermaTutti(inputArrayCheckBox){
        
        
        if(inputArrayCheckBox.length){
            arrayCheckBox = inputArrayCheckBox;
          }else{
            arrayCheckBox = [];
            arrayCheckBox[0] = inputArrayCheckBox;
          }
        
        if(arrayCheckBox.length > 0){
    
            for(var n=0; n<arrayCheckBox.length;n++){
                if(arrayCheckBox[n].checked){
            
                    var id = arrayCheckBox[n].value;
                    var campo = "start_ts"; 
                    var valore = "start_tsConfTXT" + id;
                        
                    inseriscieffettivi(id, campo, document.getElementById(valore).value);
                    
                }
            }
    
            $('#DIVselecctall span').removeClass('checked'); 
            
        } else {
            alert('ERRORE!\nDevi selezionare almeno un elemento');
            return false;
        }        
    }
    Grazie mille per il supporto.

  8. #8
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    E unire codice A con codice B non l'hai considerato?
    codice:
    function confermaTutti(inputArrayCheckBox){
    var conta=0;
    if(inputArrayCheckBox.length > 0){
          var arrayCheckBox = inputArrayCheckBox;
        for(var n=0; n<arrayCheckBox.length;n++){
            if(arrayCheckBox[n].checked){
                conta++;
                var id = arrayCheckBox[n].value;
                var campo = "start_ts"; 
                var valore = "start_tsConfTXT" + id;
                inseriscieffettivi(id, campo, document.getElementById(valore).value);
            }else{
                conta--;
            }
        }
          }else{
        if(inputArrayCheckBox[0].checked){
            conta++;
        }else{
            conta--;
          }
        $('#DIVselecctall span').removeClass('checked'); 
        if(conta==0){
            alert('ERRORE!\nDevi selezionare almeno un elemento');
            return false;
        }    
    }
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Devi scatenare l'alert quando non c'è nessuna checkbox attiva(checked è uguale a false) non quando l'array è vuoto (significa che non c'è neanche un checkbox nella pagina). Il codice proposto da Andrea invece non penso sia corretto. Ti bastava usare il primo codice postato aggiungendo il codice che ti ho suggerito subito dopo la definizione della funzione.

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.