jquery show/hide element on multiple radio button selection

耗尽温柔 提交于 2019-12-11 09:40:20

问题


I'm very new to web development, if you can even call it that, especially jQuery and I've hit a brick wall with a jQuery.

What I have is a form(for selection purposes), and a series of Paypal buttons. The function I need to perform is a show/hide but only if a particular selection of three radio buttons has been selected. Each three combination selection is to show/hide a corresponding paypal button.

I can show/hide fine with a single form radio selection, but not for the combination.

You'll have to excuse my cabbage coding as I'm still only a beginner, the code could be alot more optimized, thankfully it's only a low traffic site/small market its going into.BIG kudos to anyone who can help me.

Have managed to hide all the buttons fine. Script below

<script type="text/javascript">

$(document).ready(function(){

    //Hide div w/id extra
         $("#button1,#button2,#button3,#button4,#button5,
             #button6,#button7,#button8,#button9,#button10,
             #button11, #button12, #button13, #button14,#button15,
             #button16,#button17,#button18,#button19,#button20,
              #button21,#button22,#button23,#button24,                 
              #button25,#button26,#button27").css("display","none");

});

</script>

Here is the form html

    <form action="order-lamb" method="post" id="order">
   <input type="hidden" name="pack" value="whole" />
   <div class="form-item leg option left2">
      <h3> Choose from the following Leg options</h3>
      <p>Choose what leg options you would like:</p>
      <label for="leg-one-of-each"><input type="radio" name="leg" value="each" id="leg-one-of-each" />1 x Carvery and 1 x Butterfly Legs</label>
      <p class="or">OR</p>
      <label for="leg-both-carvery"><input type="radio" name="leg" value="carvery" id="leg-both-carvery" />2 x Carvery Legs</label>
      <p class="or">OR</p>
      <label for="leg-both-butterfly"><input type="radio" name="leg" value="butterfly" id="leg-both-butterfly" /> 2 x Butterfly Legs</label>
   </div>
   <div class="form-item loin option right2 ">
      <h3> Choose from the following Loin options:</h3>
      <p>Choose what loin options you would like:</p>
      <label for="loin-one-of-each"><input type="radio" name="loin" value="loin-each" id="loin-one-of-each" />1 x Nolsette Loin and 1 x Backstrap &amp; Tenderloin</label>
      <p class="or">OR</p>
      <label for="loin-both-nolsette"><input type="radio" name="loin" value="nolsette" id="loin-both-nolsette" />2 x Nolsette Loins </label>
      <p class="or">OR</p>
      <label for="loin-both-backstrap"><input type="radio" name="loin" value="backstrap-tenderloin" id="loin-both-backstrap" />2 x Backstrap &amp; Tenderloins </label>
   </div>
   <div class="cf"></div>
   <div class="form-item shoulder option left2">
      <h3>Choose from the following Shoulder options:</h3>
      <p>Choose what shoulder option you would like:</p>
      <label for="shoulder-one-of-each"><input type="radio" name="shoulder" value="shoulder-each" id="shoulder-one-of-each" /> 1 x Bone and Rolled and 1 x French Danish</label>
      <p class="or">OR</p>
      <label for="shoulder-both-bone-and-rolled"><input type="radio" name="shoulder" value="bone-and-rolled" id="shoulder-both-bone-and-rolled" />2 x Bone and Rolled</label>
      <p class="or">OR</p>
      <label for="shoulder-both-french-danish"><input type="radio" name="shoulder" value="french-danish" id="shoulder-both-french-danish" />2 x French Danish</label>
   </div>
   <div class="form-item included right2">
      <h3>You will also get:</h3>
      <p>These are included:</p>
      <span class="choice selected">2 x Fully Frenched Racks </span>
      <p class="or">AND</p>
      <span class="choice selected">1 x Coastal Spring Lamb Mince Pack </span> </span>    
      <p class="or">AND</p>
      <span class="choice selected">1 x Coastal Spring Lamb Patty Pack</span> </span>
   </div>
   <div class="clear"></div>
   <div class="align-right" />
   <div class="form-item submit">
      <p class="error">You must select an option in each category.</p>
      <input type="image" name="submit" src="images/buttons-and-logos/awaiting-payment.png" id="submit" border="0" />
      <p class="paypal">You will receive a confirmation email when your payment has been processed via paypal. <br />Price includes freight and GST.<br /></p>
   </div>
</form>

回答1:


first off you should make a class for those buttons which would make your code easier to keep clean and less effort on your part. It would go something like this.

In your button creation.

<input type="button" class="hideMe">

Then in a CSS file you would have as follows

.hideMe{
     display:none;
}

Or if you dont want a CSS file seperate you can also do as follows in your javascript section.

<script type="text/javascript">
$(document).ready(function(){
     //Hide div w/id extra
     $(".hideMe").css("display","none");

});
</script>

Along those lines anyway.

Secondly, to answer your main question, you can always have a check on the last button to ensure all 3 are checked.

$('input:radio[name="yourRadioNameHere"]').change(function(){
       if ($(this).is(':checked') && $(radioButton2).is(':checked')  && $(radioButton2).is(':checked') ) {
         // Do whatever you need to do here
       }
});

I am sure there is a more elegant solution out there however I am tired at the moment and just about to finish up for the day lol. But that should work.

Hope this helps!

EDIT: To get it working on all 3 checkboxes you would need to do 3 if statements. However to save repeating of code create a function to perform the checks for you. Eg

    function checkChecked(){
           if ($(this).is(':checked') && $(radioButton2).is(':checked')  && $(radioButton2).is(':checked') ) {
         // Do whatever you need to do here
       }
    }

You would then have 3 if statements that call this function. An example below.

       $('input:radio[name="yourRadioNameHere"]').change(function(){
       checkCheck();
});  

As I said there are more then likely more elegant solutions out there but this will get what your looking for done. For example I am pretty sure there are functions out there that will check if any check box is changed which would save you the 3 if statements. However I shall leave that google search to you :).

Hope the extra code helps.



来源:https://stackoverflow.com/questions/12680111/jquery-show-hide-element-on-multiple-radio-button-selection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!