0

特定の基準が満たされた場合にのみ表示したい 1 つのパネルを含むアコーディオンがあります。パネル ID は「product-options」です。

私はいくつかの JavaScript 関数を持っています。1 つはドロップダウンから州を確認すること (dropdown id="province") で、もう 1 つはチェックボックス (checkbox id="age_verification") で年齢を確認することです。アコーディオン パネル "product-options" は、ヘッダー id="BuyThis" でアクティブ化されます。

私が望むのは、状態がリストと一致する場合にのみパネル「製品オプション」を表示することです。

これが私のスクリプトです。

<script>
// Validates State is in list of allowed for wine shipping...  
function validateState() {
      // Confirms province is allowed for wine shipping     
          var states = ["Alaska", "Arizona", "California", "Colorado", ""];
                 if ($.inArray($("#province").val(), states) <0) {
                 alert("Shipping gifts containing alcohol to this state is prohibited by law. Please choose another item.");
                 return false;       
        }
alert("Item Available! Please choose your options.");
return true;
}
    // Validates age verification is checked...   
    function validateAge() {    
        if (!$('#age_verification').is(':checked')) {
            alert("Please verify you are 21 years of age or older.");
            return false;       
        }    
return true;
}
</script>

対応する HTML:

<h3 id="BuyThis" onclick="return validateState();"><button class="Button buyThisBtn"><i class="icon-shopping-cart"></i>&nbsp;&nbsp;Buy This!</button></h3>              
<div class="ProductContainer" id="product-options"> 
    <form>
    [BODY OF ACCORDION PANEL WITH A BUNCH OF IRRELEVANT CODE......]     

             <button id="addtocart" type="submit" class="Button" onclick="validateAge(); return validateState();"><i class="icon-shopping-cart"></i> ADD TO CART</button>                   
    </form>
</div>

私は無駄に以下を組み込んでみました:

$(function () {
    $("#buyThis").change(function () {
    if ($.inArray($("#province").val(), states) <0) {                
         alert("Shipping gifts containing alcohol to this state is prohibited by law. Please choose another item.");
         $("product-options").hide();               
    }                
$("product-options").show();             
}
4

1 に答える 1

2

このようにしてみてください:

<h3 id="BuyThis" ><button class="Button buyThisBtn"><i class="icon-shopping-cart"></i>&nbsp;&nbsp;Buy This!</button></h3>              
<div class="ProductContainer" id="product-options"> 
    <form>
    [BODY OF ACCORDION PANEL WITH A BUNCH OF IRRELEVANT CODE......]     

             <button id="addtocart" type="submit" class="Button" onclick="validateAge(); return validateState();"><i class="icon-shopping-cart"></i> ADD TO CART</button>                   
    </form>
</div>


$(function () {
    $("#buyThis").click(function () {

if(validateState()){

       if ($.inArray($("#province").val(), states) <0) {                
         alert("Shipping gifts containing alcohol to this state is prohibited by law.         Please choose another item.");
         $("product-options").hide();               
       }                
    $("product-options").show();
  }             
}

編集 2

コードにいくつかの変更を加えたこのフィドルを参照してください。

$.inArray メソッドを間違った方法で使用していないことに注意してください。クリックイベントとvalidateState関数で私は思います。

また、html マークアップにいくつかの変更を加えました

編集 3

実際の例でこのフィドルを見てください:これが今あなたに役立つことを願っています。

html

<select id="province">
    <option value="Alabama">Alabama</option>
    <option value="Alaska">Alaska</option>
    <option value="Arizona">Arizona</option>
    <option value="Arkansas">Arkansas</option>
    <option value="California">Colorado</option>
</select>
         <button id="test" >Teste</button>  
<h3 id="BuyThis" style="background:red;" >

    <button id="buyThisButton" class="Button buyThisBtn"><i class="icon-shopping-cart"></i>&nbsp;&nbsp;Buy This!</button>
</h3>              
<div class="ProductContainer" id="product-options"> 
    <form>
    [BODY OF ACCORDION PANEL WITH A BUNCH OF IRRELEVANT CODE......]    
        <button id="addtocart" type="submit" class="Button" onclick="validateAge(); return validateState();"><i class="icon-shopping-cart"></i> ADD TO CART</button>                   
    </form>
</div>

JavaScript

$( document ).ready(function() {
  // Handler for .ready() called.

    $("#BuyThis").click(function() {
    //alert("test");

     if(validateState()){
         // if state is valid do this

     }else{
     // do that

     }
  });


}); // end of dom ready



// Validates State is in list of allowed for wine shipping...  
function validateState() {
      // Confirms province is allowed for wine shipping     
          var states = ["Alaska", "Arizona"];
                 if ($.inArray($("#province").val(), states) >= 0) {                     
                 alert("Oh no! Shipping items containing alcohol to this state is prohibited by law. Please choose another item.");
                 //$("#BuyThis").unbind("click");
                 $("#product-options").slideUp(); 
                 return false;       
        }
    alert("Item Available! Please choose your options.");
    $("#product-options").slideDown();  
    return true;
}


    // Validates age verification is checked...   
    function validateAge() {    
        if (!$('#age_verification').is(':checked')) {
            alert("Please verify you are 21 years of age or older.");
            return false;       
        }    
return true;
}
于 2013-11-14T00:05:23.140 に答える