Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Checkbox required

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2020
    Messaggi
    26

    Checkbox required

    Salve a tutti,
    ho l'esigenza di aggiungere un campo checkbox di nome "Test" e renderlo obbligatorio, si trova sotto la richiesta di nome e cognome.
    Ho inserito la riga ma non riesco a renderlo obbligatorio utilizzando la stessa classe "className".

    Qualche suggerimento?

    codice:
    <!DOCTYPE html>
    <html>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://fonts.googleapis.com/css?family=Raleway" rel="stylesheet">
    <style>
    * {
      box-sizing: border-box;
    }
    
    
    body {
      background-color: #f1f1f1;
    }
    
    
    #regForm {
      background-color: #ffffff;
      margin: 100px auto;
      font-family: Raleway;
      padding: 40px;
      width: 70%;
      min-width: 300px;
    }
    
    
    h1 {
      text-align: center;  
    }
    
    
    input {
      padding: 10px;
      width: 100%;
      font-size: 17px;
      font-family: Raleway;
      border: 1px solid #aaaaaa;
    }
    
    
    /* Mark input boxes that gets an error on validation: */
    input.invalid {
      background-color: #ffdddd;
    }
    
    
    /* Hide all steps by default: */
    .tab {
      display: none;
    }
    
    
    button {
      background-color: #04AA6D;
      color: #ffffff;
      border: none;
      padding: 10px 20px;
      font-size: 17px;
      font-family: Raleway;
      cursor: pointer;
    }
    
    
    button:hover {
      opacity: 0.8;
    }
    
    
    #prevBtn {
      background-color: #bbbbbb;
    }
    
    
    /* Make circles that indicate the steps of the form: */
    .step {
      height: 15px;
      width: 15px;
      margin: 0 2px;
      background-color: #bbbbbb;
      border: none;  
      border-radius: 50%;
      display: inline-block;
      opacity: 0.5;
    }
    
    
    .step.active {
      opacity: 1;
    }
    
    
    /* Mark the steps that are finished and valid: */
    .step.finish {
      background-color: #04AA6D;
    }
    </style>
    <body>
    
    
    <form id="regForm" action="/action_page.php">
      <h1>Register:</h1>
      <!-- One "tab" for each step in the form: -->
      <div class="tab">Name:
        <p><input placeholder="Nome..." oninput="this.className = ''" name="nome"></p>
        <p><input placeholder="Cognome..." oninput="this.className = ''" name="cognome"></p>
           <p><input type="checkbox" name="test"  oninput="this.className = ''" checked="checked">
         
      </div>
      <div class="tab">Contact Info:
        <p><input placeholder="E-mail..." oninput="this.className = ''" name="email"></p>
        <p><input placeholder="Phone..." oninput="this.className = ''" name="phone"></p>
      </div>
      <div class="tab">Birthday:
        <p><input placeholder="dd" oninput="this.className = ''" name="dd"></p>
        <p><input placeholder="mm" oninput="this.className = ''" name="nn"></p>
        <p><input placeholder="yyyy" oninput="this.className = ''" name="yyyy"></p>
      </div>
      <div class="tab">Login Info:
        <p><input placeholder="Username..." oninput="this.className = ''" name="uname"></p>
        <p><input placeholder="Password..." oninput="this.className = ''" name="pword" type="password"></p>
      </div>
      <div style="overflow:auto;">
        <div style="float:right;">
          <button type="button" id="prevBtn" onclick="nextPrev(-1)">Previous</button>
          <button type="button" id="nextBtn" onclick="nextPrev(1)">Next</button>
        </div>
      </div>
      <!-- Circles which indicates the steps of the form: -->
      <div style="text-align:center;margin-top:40px;">
        <span class="step"></span>
        <span class="step"></span>
        <span class="step"></span>
        <span class="step"></span>
      </div>
    </form>
    
    
    <script>
    var currentTab = 0; // Current tab is set to be the first tab (0)
    showTab(currentTab); // Display the current tab
    
    
    function showTab(n) {
      // This function will display the specified tab of the form...
      var x = document.getElementsByClassName("tab");
      x[n].style.display = "block";
      //... and fix the Previous/Next buttons:
      if (n == 0) {
        document.getElementById("prevBtn").style.display = "none";
      } else {
        document.getElementById("prevBtn").style.display = "inline";
      }
      if (n == (x.length - 1)) {
        document.getElementById("nextBtn").innerHTML = "Submit";
      } else {
        document.getElementById("nextBtn").innerHTML = "Next";
      }
      //... and run a function that will display the correct step indicator:
      fixStepIndicator(n)
    }
    
    
    function nextPrev(n) {
      // This function will figure out which tab to display
      var x = document.getElementsByClassName("tab");
      // Exit the function if any field in the current tab is invalid:
      if (n == 1 && !validateForm()) return false;
      // Hide the current tab:
      x[currentTab].style.display = "none";
      // Increase or decrease the current tab by 1:
      currentTab = currentTab + n;
      // if you have reached the end of the form...
      if (currentTab >= x.length) {
        // ... the form gets submitted:
        document.getElementById("regForm").submit();
        return false;
      }
      // Otherwise, display the correct tab:
      showTab(currentTab);
    }
    
    
    function validateForm() {
      // This function deals with validation of the form fields
      var x, y, i, valid = true;
      x = document.getElementsByClassName("tab");
      y = x[currentTab].getElementsByTagName("input");
      // A loop that checks every input field in the current tab:
      for (i = 0; i < y.length; i++) {
        // If a field is empty...
        if (y[i].value == "") {
          // add an "invalid" class to the field:
          y[i].className += " invalid";
          // and set the current valid status to false
          valid = false;
        }
      }
      // If the valid status is true, mark the step as finished and valid:
      if (valid) {
        document.getElementsByClassName("step")[currentTab].className += " finish";
      }
      return valid; // return the valid status
    }
    
    
    function fixStepIndicator(n) {
      // This function removes the "active" class of all steps...
      var i, x = document.getElementsByClassName("step");
      for (i = 0; i < x.length; i++) {
        x[i].className = x[i].className.replace(" active", "");
      }
      //... and adds the "active" class on the current step:
      x[n].className += " active";
    }
    </script>
    
    
    </body>
    </html>

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, la tua funzione validateForm() controlla, per tutti gli elementi input, che la relativa proprietà value non sia vuota. Il problema sta nel fatto che, per gli elementi checkbox, la proprietà value ha il valore "on" come default e tale valore resta tale (se non diversamente impostato) a prescindere dal fatto che il checkbox sia o no spuntato.

    Per controllare se un checkbox è spuntato non dovresti controllarne la proprietà value (a meno che questa non venga alterata in qualche altro modo) ma piuttosto dovresti controllarne la proprietà checked, che appunto risulta true se il checkbox è spuntato o false se non lo è.

    Potresti quindi aggiungere un ulteriore controllo nella condizione dentro la funzione validateForm(), una cosa del tipo:

    codice:
    if (y[i].value == "" || (y[i].type == 'checkbox' && !y[i].checked))

    Quindi, a parte il value, viene controllata anche la proprietà checked se si tratta di un elemento di tipo checkbox.

    Vedi se va. Fai sapere.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.