2016-07-31 6 views
0

フォームを作成しようとしていますが、すべてのフィールドを入力してから正常に送信できます。jQuery/PHPフォームは意図しない動作を送信します

たとえば、エラーが発生した場合はエラーカウンタが増加し、カウンタが0でない場合はフォームが送信されず、アラートボックスが表示され、空のフィールドがいくつかあります。 これは意図された動作です。しかし、私は再びそれを提出しようとすると、エラーがあっても、それは正常に提出します。

それは容易になります場合は、ここでの一時的なURLが質問にWebページのためだ。ここではhttp://176.32.230.49/cecc.co.uk/add-season.php

は私のコードです:

jQueryの(問題のコード)

$("#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> 

答えて

0

エラーフリーインクリメントは、エラーボックスは表示されません。なぜ2回目に提出したのかは、errorFreeを増やさない理由と、なぜフォームが提出されたのかの理由だと思います。

0

問題は、この状態によって引き起こされる:

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

値が空の場合は、提出をクリックし.error-boxが隠されている、あなたはエラーを表示し、errorFreeをインクリメント初めて。

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

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

私はempty/filledロジックからshow/hideロジックを分離することをお勧め:しかし、.error-boxを提出する次のクリックがすでには、値が空の場合でも、上記の条件が満たされることはありませんので、を示しています

関連する問題