Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 38
  1. #1

    Limitare selezione checkbox e aggiungere/rimuovere classe

    Salve,
    ho scritto un codice per limitare le selezioni di input checkbox a 2 disabilitando in automatico tutte le altre + il bottone x l'invio del form.
    Inoltre quando si seleziona un checkbox viene aggiunta una classe per cambiare il background della riga all'interno della tabella.
    Ora...funziona tutto però.... dato che secondo me è scritto molto male vorrei sapere se potete aiutarmi ad ottimizzare il codice riscrivendolo d'accapo in più mi servirebbe inoltre che vengano passato i due valori dei checkbox selezionati in 2 campi hidden.

    ---> FOGLI DI STILE (inserisco solo la classe che modifica il background della riga)

    codice:
    .selected { background-color: #E0EFF7; }
    ---> CODICE JAVASCRIPT

    codice:
    <script type="text/javascript">
    
    /* Highlight Row */
    function highlight(id, currentClass, checkboxId)
    {
       var checkbox_element = document.getElementById(checkboxId);
       var row_element = document.getElementById(id);
       var lista_check = document.getElementsByTagName("input");
       var conta = 0;
            row_element.className = checkbox_element.checked ? 'selected' : currentClass;
    
    for(i = 0; i < lista_check.length; i++){
    if(lista_check.item(i).getAttribute("type") == "checkbox" && lista_check.item(i).checked == true){
    conta++;
    }
    }
    if (conta == 2) {
          document.getElementById('submit').disabled=false;
    
    for(i = 0; i < lista_check.length; i++){
    if(lista_check.item(i).getAttribute("type") == "checkbox" && lista_check.item(i).checked == false){
    lista_check.item(i).disabled = true;
    }
    }
    
    
    }
    if (conta < 2) {
          document.getElementById('submit').disabled=true;
    
    for(i = 0; i < lista_check.length; i++){
    if(lista_check.item(i).getAttribute("type") == "checkbox" && lista_check.item(i).checked == false){
    lista_check.item(i).disabled = false;
    }
    }
    
    
    }
    if(conta > 2){
          document.getElementById(checkboxId).checked = false;
    }
    
    }
    
    </script>

    --> FORM il campo $item->id viene generato con un ciclo foreach dove estrapola il valore da un database (inserisco solo alcune righe)

    codice:
    <form action="/confronta/?" method="get" name="mioform" accept-charset="utf-8">
    <input type="hidden" name="valore1" value="">
    <input type="hidden" name="valore2" value="">
    
    <tr id="tr<?php echo "$item->id"; ?>" class="tr_class">
     <td class='num'><input id="<?php echo "$item->id"; ?>" type="checkbox" class="" value="<?php echo "$item->id"; ?>" onClick="JavaScript: highlight('tr<?php echo "$item->id"; ?>', '<?php echo $item->class ?>', this.id);"></td>
     <td class='num'><input id="<?php echo "$item->id"; ?>" type="checkbox" class="" value="<?php echo "$item->id"; ?>" onClick="JavaScript: highlight('tr<?php echo "$item->id"; ?>', '<?php echo $item->class ?>', this.id);"></td>
     <td class='num'><input id="<?php echo "$item->id"; ?>" type="checkbox" class="" value="<?php echo "$item->id"; ?>" onClick="JavaScript: highlight('tr<?php echo "$item->id"; ?>', '<?php echo $item->class ?>', this.id);"></td>
     <td class='num'><input id="<?php echo "$item->id"; ?>" type="checkbox" class="" value="<?php echo "$item->id"; ?>" onClick="JavaScript: highlight('tr<?php echo "$item->id"; ?>', '<?php echo $item->class ?>', this.id);"></td>
    </tr>
    
     <input type="submit" id="submit" value="Confronta" disabled>
    </form>

    Funziona tutto ma come ho detto prima vorrei sapere se è possibile scrivere un codice migliore e in piu passare i due valori nei 2 campi hidden.
    Spero che qualcuno sappia aiutarmi.

    Grazie!!

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Forse si riesce ad eseguire un solo ciclo for da studiare e provare, se già usi jquery potrebbe migliorare
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Ciao... si ma il problema è ... come?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Vedo tante graffe inutili e 2 condizioni di conta abbreviabili con un operatore ternario nel codice js

  5. #5
    i consigli sono ben accetti ma anche qualche soluzione possibilmente scritta

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    secondo me si può ridurre a questo:

    codice:
    cont = 0;
    
    /* Highlight Row */
    function highlight(id, currentClass, checkboxId)
    {
       var row_element = document.getElementById(id);
       var lista_check = document.getElementsByTagName("input");
       row_element.className = checkboxId.checked ? 'selected' : currentClass;
    
       checkboxId.checked ? cont++ : cont--
    
       document.getElementById('submit').disabled= cont != 2;
       for(i = 0; i < lista_check.length; i++){
         if(lista_check.item(i).getAttribute("type") == "checkbox" &&     lista_check.item(i).checked == false){
           lista_check.item(i).disabled = cont == 2;
         }
       }
    }​
    Devi anche modificare la chiamata al metodo cosi: highlight('tr<?php echo "$item->id"; ?>', '<?php echo $item->class ?>', this);

    Fai un po' di prove

  7. #7
    ciao... beh ho provato la tua soluzione ma non funziona :/
    non cambia il backgroung della riga, non limita la selezione a 2, non disabilita tutte le altre e non attiva il bottone ... eppure il tuo codice sembra scritto bene. Boh

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    hai cambiato la chiamata al metodo?

  9. #9

  10. #10
    ricevo un errore

    Uncaught ReferenceError: highlight is not defined

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.