Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003

    Numero checkbox spuntati

    Salve a tutti ho fatto una ricerca nel forum ed ho trovato la soluzione ma non capisco perchè non funziona.
    Ho un form con dei checkbox ognuno dei quali è un elemento di un array (<input type="checkbox" name="notizia[]" value="3" />")
    Anzichè fare un submit del forum a priori, ho messo un button che onclick mi va ad una funzione che controlla che almeno uno dei checkbox sia stato selezionato.
    Praticamente, dalle soluzioni che ho trovato nel forum, si consiglia di fare un ciclo sull'array e verificare se ogni elemento è checked. A me il ciclo non lo inizia proprio.
    Ho provato a fare un alert su "document.news.elements['notizia[]'].length" (dove news è il nome del form) ma mi restituisce "undefined".
    Qualcuno sa dirmi perchè? :master:

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Posta il link alla pagina.
    Se non e` possibile posta:
    - il tag <form>
    - i tag <input type="checkbox" value="notizia[]">
    - la funzione javascript completa
    - eventuali altri tag e/o funzioni chiamate/usate
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Non posso mettere il link alla pagina perchè è locale.
    La funzione che ho fatto è questa.
    codice:
    function deleteNews() {
     var chek = document.news.elements['notizia[]'];
     var cheks = 0;
     for (var i=0; i<chek.length; i++) {
      if(chek[i].checked) cheks++ 
     }
     if (cheks == 0) {
      alert("Non hai selezionato alcuna notizia");
      return false;
     }
     else {
      var asd = confirm('Sicuro che vuoi eliminare le notizie selezionate?');
      if (asd) {
       document.news.action="?ID=news;pID=delete";
       document.news.submit();
       return true;
      }
      else {
       return false;
      }  
     }
    }
    Il tag form è questo
    <form name="news" method="post">
    e i checkbox vengono creati così
    <input type="checkbox" name="notizia[]" value="<?=$notizia->IDnews?>" />

  4. #4
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    In questo modo la funzione "funziona" però non mi esegue il ciclo. Anche se seleziono una notizia mi da sempre l'alert "Non hai selezionato alcuna notizia"

  5. #5

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Sei sicuro di non aer fatto errori di sintassi?

    Perche` a guardarlo lo script e` corretto, ma potrebbero esserci riferimenti errati (JS e` case-sensitive).

    per controllo prova ad inserire nel tuo loop un alert cosi`:
    codice:
      for (var i=0; i<chek.length; i++) {
        alert("valore:"+chek[i].value+ chek[i].checked?"checked":"");
        if(chek[i].checked) cheks++ 
      }
    Diventera` un po' pedante, specie se i checkbox sono molti, ma puoi vedere cosa "passa in testa" allo script.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Il problema è che il ciclo non lo esegue proprio.
    In realtà per lo script il numero di checkbox presenti nel form è "undefined".
    Ho un solo checkbox al momento (vengono creati dinamicamente) ma se provo a far stampare document.news.elements['notizia[]'][0].value in un'alert mi dà errore nel caricamento della pagina (su explorer).
    eppure il nome del checkbox è corretto (comprese le maiuscole/minuscole).

  8. #8
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    acc... se c'è più di un checkbox funziona lo script (ho provato inserendone un'altro). VVoVe:
    Come posso fare nel caso ce ne sia uno solo?

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Occorre verificare se l'elemento e` una matrice o un singolo:
    if(!chek.length)
    Ad esempio:
    codice:
    function deleteNews() {
      var chek = document.news.elements['notizia[]'];
      var cheks = 0;
      if(!chek.length) {
        checks = check.checked
      } else {
        for (var i=0; i<chek.length; i++) {
          if(chek[i].checked) cheks++ 
        }
      }
    
      if (cheks == 0) {
        alert("Non hai selezionato alcuna notizia");
        return false;
      } else {
        var asd = confirm('Sicuro che vuoi eliminare le notizie selezionate?');
        if (asd) {
          document.news.action="?ID=news;pID=delete";
          document.news.submit();
          return true;
        } else {
          return false;
        }  
      }
    }
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #10
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Funziona perfettamente grazie.

    Supponevo che venisse comunque utilizzato un'array di un solo elemento e che quindi la length dell'elemento fosse almeno 1.

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.