2013-09-23 63 views
2

上週我剛剛開始學習HTML/CSS,javascript和jQuery,非常感謝您的幫助。 我用複選框(id #ship_to_billing)創建了一個表單,然後創建了一個包含5個文本字段的字段集(id #shipping_info)。使用JQuery我已經設置好了,如果複選框被選中,它會切換其他字段並隱藏它們。但是,我無法弄清楚如何另外需要一個或另一個,或者必須選中複選框或者必須完成字段集中的所有文本字段。我不需要警報。請幫忙!複選框選中後需要fieldset

謝謝大家提前,蘇珊

<a type="button" class="btn btn-primary" href="#product-options" data-   
toggle="modal">Buy This!</a>           
    <div class="modal hide fade" id="product-options">      
     <div class="modal-header center"> 
      <a class="close" data-dismiss="modal">x</a> 
       <h3>When, Where and How?</h3> 
     </div> 
      <div class="modal-body l-m"> 
      {% include 'datepicker' %} 
      <p> 
      <input type="hidden" name="properties[ship_to_billing]" value="" />       
      <label for="ship_to_billing" style="max-width:335px;"> 
      <input id="ship_to_billing" type="checkbox" name="properties[Ship to Billing Address]" value="Yes" {% if properties.ship_to_billing %} checked="checked"{% endif %} /> 
      <font size=1>Check here to have items shipped to your billing address (collected during checkout). Otherwise please fill out the information below.</font> 
      </label><br /> 
      </p>       
      <div class="fieldgroup" id="shipping_info"> 
      <label for="shipping_name">Name of Recipient:</label>  
      <input class="input-xlarge" type="text" id="shipping_name" placeholder="Name" name="properties[Recipient]" required="required" />         
      <p> 
      <label for="address_street">Shipping Address:</label> 
      <input class="input-xlarge" type="text" id="address_street" placeholder="Street Address" name="properties[Address]" required="required" /> 
      <input class="input-xlarge" type="text" id="address_city" placeholder="City" name="properties[City]" required="required" /> 
      <input class="input-medium" type="text" id="address_province" placeholder="State" name="properties[State]" required="required" /> 
      <input class="input-medium" type="text" id="address_zip" placeholder="Zip Code" name="properties[Zip]" required="required" /> 
      </p> 
      </div> 
      <p> 
      <label for="gift_msg">Gift Message :</label>         
      <textarea id="gift_msg" placeholder="Please type your message" name="properties[Gift Message]" rows="4" cols="45"></textarea> 
      </p>        
     </div> 

     <div class="modal-footer"> 
      <div class="btn-group"> 
       <button href="#" class="btn" data-dismiss="modal">Cancel</button> 
       <button type="submit" onclick="return validateShipping();" class="btn btn-primary" id="addtocart">Add To Cart</button> 
      </div> 
      </div>    
     </div> 

JQUERY:

<script> 
$('#ship_to_billing').change(function(){ 
$('#shipping_info').toggle('show'); 
}); 
</script> 
+0

所以我正確地假設,如果複選框被選中,然後字段消失?對不起,如果這是一個有點迂迴;) –

+0

@ChrisKempen我相信複選框被初步檢查。 – silvenon

+0

我不確定我是否理解這個問題。 「額外需要」是什麼意思?複選框必須被選中或者必須填寫字段爲什麼? – silvenon

回答

3

客戶端驗證總是會落在第二個最好的服務器端驗證,用戶可隨時禁用Javascript或強制發佈廢話,可以重寫瀏覽器的能力,但你的服務器不能輕易上當!這就是說,你在正確的軌道上,但我會忍不住把它裝修好一點...首先,你的HTML(有刪節):

<form method="post"> 
    <input id="ship_to_billing" type="checkbox" name="properties" /> 
    <div class="fieldgroup" id="shipping_info"> 
     <input type="text" id="shipping_name" name="properties[Recipient]" /> 
     <input type="text" id="address_street" name="properties[Address]" /> 
     ... 
    </div> 
    <input type="submit" onclick="return validateMyStuff();" value="Submit" /> 
</form> 

接下來,你的腳本,稍微更穩健:

<script src="/path/to/jquery.js"></script> 
<script type="text/javascript"> 

    // this will run when the document's done loading... 
    $(function(){ 
     $("#ship_to_billing").change(function(){ 
      // make sure of the checked state... 
      // hide the fields if the checkbox is checked... 
      // 'this' is the checkbox... 
      if ($(this).is(":checked")) // fixed error here! ;) 
       $("#shipping_info").hide(); 
      else 
       $("#shipping_info").show(); 
     }); 
    }); 

    // validate the input, only if the checkbox is not checked... 
    // this will be called when your submit button is clicked... 
    function validateMyStuff() { 
     if (!$("#ship_to_billing").is(":checked")) { 
      // check to see that the other input fields have values... 
      var inputs = $("#shipping_info input"); 
      var ready = true; 
      inputs.each(function(){ 
       // 'this' is the current input we're validating... 
       if ($(this).val() == '') { 
        ready = false; 
        return false; // exits jQuery '.each' function... 
       } 
      }); 
      if (!ready) { 
       alert("You forgot to fill in something!"); 
       return false; 
      } 
     } 
     return true; 
    } 

</script> 

那麼,這是我可以根據原始問題中的有限信息給出的最佳解釋。希望這可以幫助! :)

編輯1:

我的歉意!我在我的JavaScript代碼的第10行遺漏了一個右括號)!我已經解決了這個問題,並將上面的代碼複製/粘貼到HTML頁面中似乎工作正常。請記住將您的jQuery腳本包含在其餘腳本的上方,並將腳本放入HTML的<head>...</head>部分。

+0

這似乎應該是完全完美的,我非常感謝你花時間給我這樣一個徹底的答案!但是,唉,我只是試了一下,似乎無法讓它工作。我在切換我的提交按鈕的名稱之外複製了您的JQuery,但它沒有這樣做! :-( 不知道它是否會給你任何更多的信息,但我編輯我的HTML以上的整個這一頁的部分,並想提及它是在語法的形式:

再次謝謝!! – susan

+0

這實際上甚至沒有崩潰我的fieldgroup ...我做錯了什麼? – susan

+0

嗨@susan ...我的道歉,我的代碼中有一個小小的錯誤,希望它能更貼近你現在的設想!) –

0

至於客戶端驗證,你可以給所有的輸入內shipping_info FieldSet中的required attribute這樣

$('#shipping_info input').attr('required', true); 

但是,這並不能保證字段將被填補,因爲用戶可以繞過這個。因此,無論你做什麼,都必須檢查服務器端。

+0

這有效,所以required =「required」,但我只能弄清楚如何讓它們全部被需要,沒有用JQuery來完成任何一種或者任何場景的語法。 – susan

+0

再次感謝您的答覆,非常感謝。還想提一提這是針對Shopify網站的,因此不確定服務器端驗證是否可能。 – susan