2016-07-31 6 views
0

Ich versuche ein Formular zu erstellen, in dem alle Felder ausgefüllt werden müssen, bevor es erfolgreich abgeschickt werden kann.jQuery/PHP Formular abschicken unbeabsichtigtes Verhalten

So habe ich zum Beispiel eine Logik, wo, wenn ein Fehler auftritt, der Fehlerzähler inkrementiert und wenn der Zähler nicht gleich 0 ist, dann wird das Formular nicht gesendet und eine Alarmbox erscheint Benutzer, dass es einige leere Felder gibt, die gefüllt werden müssen. Das ist das beabsichtigte Verhalten. Wenn ich jedoch versuche, es erneut einzureichen, wird es erfolgreich eingereicht, obwohl es Fehler gibt.

Wenn es macht es leichter, hier ist die temporäre URL für die Webseite in Frage: http://176.32.230.49/cecc.co.uk/add-season.php

Hier ist mein Code:

jQuery (der Code in Frage)

$("#season-submit").on('click', function(e) { 
     e.preventDefault(); 
     var errorFree = 0; 
     //var competitionEntries = $(".text-box").val(); 
     // if ($("#season-form").find(competitionEntries).val() == "") { 
      // competitionEntries.val("Illegals"); 
      $(".text-box").each(function() { 
       if ($(this).val() == "" && !($(this).siblings(".error-box").is(":visible"))) { 

        var fieldName = $(this).siblings(".error-box").attr("id"); 
        fieldName = fieldName.substr(0, fieldName.indexOf('-')); 
        fieldName = fieldName.charAt(0).toUpperCase() + fieldName.slice(1); 

        //console.log($(this).siblings(".error-box").attr("id")); 
        if (fieldName == "Competition") { 
         $(this).siblings(".error-box").text("Which " + fieldName + "?").slideDown(); 
         errorFree++; 
        } else { 
         $(this).siblings(".error-box").text("Please enter " + fieldName + "...").slideDown(); 
         errorFree++; 
        } 
       } else if ($(this).val() != "" && $(this).siblings(".error-box").is(":visible")) { 

        $(this).siblings(".error-box").slideUp(); 

       } 

      }); 

      $(".dpt").each(function() { 
       var dateTimeValue = $(this).val(); 

       if (dateTimeValue.length == 16 && isValid(dateTimeValue)) { 

        var day = parseFloat(dateTimeValue.substring(0,2)); 

        var month = parseFloat(dateTimeValue.substring(3,5)) - 1; 

        var year = parseFloat(dateTimeValue.substring(6,10)); 

        var hour = parseFloat(dateTimeValue.substring(11,13)); 

        var minute = parseFloat(dateTimeValue.substring(14,16)); 

        dateTimeValue = new Date(year, month, day, hour, minute); 

       } else { 
        errorFree++; 
        $(this).siblings(".error-box").text("Stop trying to be clever...").slideDown(); 
       } 



      }); 
      if (errorFree == 0) { 
        $("#season-form").submit(); 
       } else { 
        console.log("Ride this way..."); 
        alert("Not all entries are valid. Please correct them."); 
       } 

     //span2 dpt 
     // } 
    // $("#season-form").find(competitionEntries).val("Illegals"); 
     console.log("Oh, she wasn't"); 
    }); 

HTML

<!doctype html> 
<html class="no-js" lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <meta http-equiv="x-ua-compatible" content="ie=edge"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> 
     <title>CECC | Add Season</title> 

     <link rel="stylesheet" href="css/foundation.css" /> 
     <link rel="stylesheet" href="css/flexnav.css" type="text/css" /> 

     <link rel="stylesheet" type="text/css" href="css/style.css"/> 
     <link rel="stylesheet" type="text/css" href="css/foundation-datepicker.css" /> 
     <link href='http://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.css' rel='stylesheet' type='text/css'> 
    </head> 
    <body class="can-add-season"> 
     <div id="container"> 
      <div id="banner" class="clearfix"> 

         <img id="crest" src="images/cecc-logo2.png" /> 
         <h1>Cadmore End Cricket Club</h1> 
      </div> 


      <nav class="clearfix"> 
       <div class="menu-button">Menu</div> 
       <ul class="flexnav" data-breakpoint="800"> 
        <li><a href="#">Home</a></li> 
        <li><a href="#">About</a></li> 
        <li> 
         <a href="#">News</a> 
         <ul> 
          <li><a href="#">Social Events</a></li> 
         </ul> 
        </li> 
        <li class="item-with-ul"> 
         <a href="#">Team</a> 
         <ul> 
          <li><a href="#">Players</a></li> 
          <li><a href="#">Fixtures/Results</a></li> 
          <li><a href="#">Statistics</a></li> 
         </ul> 
        </li> 
        <li><a href="#">Gallery</a></li> 
        <li><a href="#">Contact</a></li> 
       </ul> 
      </nav> 
      <main> 
       <div class="row"> 
        <div class="large-12 columns"> 
         <h1 class="main-header text-center">Add Player</h1> 
        </div> 
       </div> 
       <div class="row"> 
        <div class="large-12 columns"> 
         <p class="standard-text text-center">You can add a new Cricket season on this web page. To add more fixtures to the season, click on the button below and a new fixture form will appear.</p> 
        </div> 
       </div> 
       <form id="season-form" enctype="multipart/form-data" action="process-season.php" method="post"> 
        <div class="fixture"> 
         <div class="row"> 
          <div class="small-12 medium-2 medium-offset-5 columns end"> 
           <label>Season 
            <select name="season"> 
             <option value="option-1" selected><?php echo intval(date("Y")) . "/" . intval(date("Y")+1); ?></option> 
             <option value="option-2"><?php echo intval(date("Y")+1) . "/" . intval(date("Y")+2); ?></option> 
             <option value="option-3"><?php echo intval(date("Y")+2) . "/" . intval(date("Y")+3); ?></option> 
            </select> 
            <div class="error-box"></div> 
           </label> 
          </div> 
         </div> 
         <div class="row"> 
          <div class="small-12 medium-4 columns"> 
           <h3 class="fixture-number">Fixture #1</h3> 
          </div> 
         </div> 
         <div class="row"> 
          <div class="small-12 medium-4 columns"> 
           <label>Date and Time 
            <input readonly id="date-time-box" type="text" class="span2 dpt" name="match-dt[]" value="<? echo date("d/m/Y"); ?> 12:00"> 
            <div id="date-time-error-1" class="error-box"></div> 
           </label> 
          </div> 
          <div class="small-12 medium-3 columns"> 
           <label>Team 
            <select name="team-division[]"> 
             <option value="team-1">1st Team</option> 
             <option value="team-2">2nd Team</option> 
            </select> 
            <div class="error-box"></div> 
           </label> 
          </div> 
          <div class="small-12 medium-3 columns"> 
           <label>Competition 
            <input id="competition-input" class="text-box" name="competition[]" type="text" /> 
            <div id="competition-error-1" class="error-box"></div> 
           </label> 
          </div> 
          <div class="small-12 medium-2 columns"> 
           <label>Home/Away 
            <select name="location[]"> 
             <option value="home">Home</option> 
             <option value="away">Away</option> 
            </select> 
            <div class="error-box"></div> 
           </label> 
          </div> 
         </div> 
         <div class="row"> 
          <div class="small-12 medium-6 columns"> 
           <label>Opponents 
            <input id="opposition-input" class="text-box" name="opposition[]" type="text" /> 
            <div id="opposition-error-1" class="error-box"></div> 
           </label> 
          </div> 
          <div class="small-12 medium-6 columns"> 
           <label>Venue 
            <input id="venue-input" class="text-box" name="venue[]" type="text" /> 
            <div id="venue-error-1" class="error-box"></div> 
           </label> 
          </div> 
         </div> 
         <div class="test"></div> 
         <div class="row"> 
          <div class="small-12 columns end"> 
           <img id="fixture-addition-logo" src="images/netvibes.png" class="float-right" /> 
           <a id="fixture-addition-text" class="float-right">Add New Fixture</a> 

          </div> 
         </div> 
        </div> 
        <div id="submit-season-container" class="row"> 
         <div class="small-12 medium-4 medium-offset-4 columns end"> 
          <!-- <input type="submit" name="create-season" id="season-submit" class="button expanded radius success" value="Submit New Season" /> --> 
          <button id="season-submit" class="button expanded radius success">Submit New Season</button> 
         </div> 
        </div> 

       </form> 
      </main> 
      <footer class="clearfix"> 
       <div class="row"> 
        <div class="medium-4 columns"> 
         <p class="float-left"><?php if (isset($_SESSION['username'])) { 
           echo $fname . " " . $lname . " <a href='logout.php'>(Sign Out)</a>"; 
          } else { 
           echo "<a href='login.php'>Login</a>"; 
          }?></p> 
        </div> 
        <div class="medium-3 columns text-center"> 
         <p>&copy; 2016 <a href="<?php 
          echo $potentialBeginning; ?>">Potential Beginning</a> 
         </p> 
        </div> 
        <div class="medium-5 columns"> 
         <p class="float-right"><a href="#">Privacy Policy</a></p> 
         <p class="float-right"><a href="#">Terms and Conditions</a></p> 
        </div> 
       </div> 

      </footer> 
     </div> 
     <script src="js/vendor/jquery.min.js"></script> 
     <script src="js/vendor/what-input.min.js"></script> 
     <script src="js/foundation.min.js"></script> 
     <script type="text/javascript" src="js/jquery.flexnav.min.js"></script> 
     <script src="js/locales/foundation-datepicker.en-GB.js"></script> 
     <script src="js/datepicker/foundation-datepicker.js"></script> 
     <script src="js/script.js"></script> 
    </body> 
</html> 

Antwort

0

Sie haben einen FehlerFrei Inkrement nur wenn Fehler-Box ist nicht sichtbar. Ich denke, das ist der Grund, warum 2. Mal, wenn Sie es einreichen, errorFree nicht erhöht und warum das Formular eingereicht wird.

0

Das Problem wird durch diesen Zustand verursacht:

$(this).val() == "" && !($(this).siblings(".error-box").is(":visible")) 

Das erste Mal, wenn Sie klicken Sie auf Absenden, wenn der Wert leer ist und .error-box versteckt wird dann Sie die Fehler anzeigen und errorFree erhöhen. Aber, klicken Sie neben einreichen .error-box ist bereits gezeigt, so auch wenn der Wert leer ist die obige Bedingung nicht erfüllt werden:

$(this).val() == "" //true 
!($(this).siblings(".error-box").is(":visible")) //false 
true && false === false 

Ich schlage vor, die show/hide Logik von empty/filled Logik zu trennen:

if($(this).val() === "") { 
    //Slide/show .error-box and increment errors 
} else { 
    //Hide .error-box 
} 
Verwandte Themen