2013-03-11 180 views
0

我一直在研究這個jQuery表單,它只允許用戶在填寫完所有字段後提交。因此,本質上,提交字段(或者在我的情況下'請求'字段)是灰色的,直到所有字段不是空白。我的按鈕總是變暗,請有人幫我解決這個問題嗎?我有jQuery的以下內容:jQuery表單驗證

$(function() { 
    var $submit = $(".request input"); 
    var $required = $(".required"); 
    function containsBlanks(){ 
     var blanks = $required.map(function(){ return $(this).val() == "";}); 
     // the inArray helper method checks if value is within an array 
     return $.inArray(true, blanks) != -1; 
    } 

    function requiredFilledIn(){ 
     if(containsBlanks()) 
     $submit.attr("disabled","disabled"); 
    else 
     $submit.removeAttr("disabled"); 
    } 

    $("#form2 span").hide(); 
    $("input").focus(function(){ 
     $(this).next().fadeIn("slow"); 
    }).blur(function(){ 
     $(this).next().fadeOut("slow"); 
    }).keyup(function(){ 
     //Check all required fields. 
     requiredFilledIn(); 
    }); 

    requiredFilledIn(); 
}); 

這是我的形式

<div id="form2" title="Request a Call-back"> 
     <p class="validateTips">All form fields are required. The submit button will activate once this is done.</p> 
     <form action="includes/requestcall.php" method="post"> 
      <fieldset> 
       <label for="name">Name:</label> 
       <input type="text" name="name" id="name" size="30" class="required" /> 
       <span>Please enter your Name</span> 
       <br /> 
       <br /> 
       <label for="number">Number:</label> 
       <input type="text" name="number" id="number" size="30" class="required" /> 
       <span>Please enter your number</span> 
       <br /> 
       <br /> 
       <label for="time">Preferred Time:</label> 
       <input type="text" name="time" id="time" size="30" class="required" /> 
       <span>Please enter your preferred time</span> 
       <br /> 
      </fieldset> 
      <p class="request"> 
      <input type="submit" value="Request" class="btn-submit"> 
      </p> 
     </form> 
    </div> 

我還在學習jQuery和任何幫助,將不勝感激。

+0

爲什麼inArray檢查?如果您在地圖功能中返回任何結果,那麼您知道您的文本框不完整。 – JustinMichaels 2013-03-11 23:49:17

+0

@JustinMichaels沒有inArray檢查我的提交按鈕始終處於活動狀態,我希望它處於非活動狀態,直到所有字段都被填充爲止。 – 5attab 2013-03-11 23:52:16

+0

請不要使用[tag:jquery-validate]標記問題,除非您使用jQuery Validate插入。謝謝。編輯。 – Sparky 2013-03-12 00:20:09

回答

1

我已經略微調整了代碼以使用過濾器函數來檢索空文本框以及使用更改事件。

This is the link to the updated script running your markup on JSFiddle

以下是更新後的腳本:

$(function() { 
    var $submit = $("input.btn-submit").attr("disabled", "disabled").css("color", "red"); 
    var $required = $(".required"); 

    function requiredFilledIn() { 
     var blanks = $required.filter(function() { 
      return $(this).val() === ""; 
     }); 
     if (blanks.length > 0) $submit.attr("disabled", "disabled").css("color", "red"); 
     else $submit.removeAttr("disabled").css("color", "black"); 
    } 

    $("#form2 span").hide(); 
    $("input:text").focus(function() { 
     $(this).next().fadeIn("slow"); 
    }).blur(function() { 
     $(this).next().fadeOut("slow"); 
    }).change(function() { 
     //Check all required fields. 
     requiredFilledIn(); 
    }); 
}); 
+0

您可能可以將requiredFilledIn函數的內容粘貼到change事件的主體中。 – JustinMichaels 2013-03-12 00:17:22

+0

非常感謝您的幫助!我還有另一個問題,我早前也想到了。我將研究過濾功能。我無法解釋我多麼感激您的努力,尤其是向我提供JSFiddle上的鏈接。保重。 @JustinMichaels – 5attab 2013-03-12 01:00:00

+0

沒問題的人,並欣賞評論。 – JustinMichaels 2013-03-12 01:15:59