0

選択したラジオボタンに応じて、リスト項目を表示/非表示にしたいと考えています。3 つのボタンがあり、それぞれが異なるフィールド セット (リスト項目内) を表示する必要があります。何らかの理由で、最後のものだけが機能します。私は何を間違っていますか?私はここでの提案に従い、私が言えることから一致しました。

ここに投稿されたjsfiddle:http://jsfiddle.net/Vm2aA/

ここに私のjQueryがあります:

        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
        <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
        <script type="text/javascript">

                    $(document).ready(function() {
                        $( "#datepicker" ).datepicker({ minDate: -1, maxDate: "+24D" });
                        $('#pancettaForm').change(function() {
                            if ($('#ship-address').prop('checked')) {
                                $('#address').show();
                            } else {
                                $('#address').hide();
                            }
                            if ($('#ship-date').prop('checked')) {
                                $('#new-ship-date').show();
                            } else {
                                $('#new-ship-date').hide();
                            }    
                            if ($('#ship-both').prop('checked')) {
                                $('#address, #new-ship-date').show();
                            } else {
                                $('#address, #new-ship-date').hide();
                            }        
                        });
                    });
        </script> 

html

    <form name="pancettaForm" method="post" action="http://lizlantz.com/lcform.php" id="pancettaForm">
            <input type="hidden" value="Pancetta Order Update" name="subject"> 
            <input type="hidden" value="cookware/partners_10151_-1_20002" name="redirect">
            <ul>
                <li>
                <label for="update-ship">I'd like to:</label> 
                    <input id="ship-address" name="update-ship" type="radio" value="update-ship-address"/> Have pancetta shipped to a different address than my skillet<br />
                    <input id="ship-date" name="update-ship" type="radio" value="update-ship-date" /> Have pancetta shipped sooner than June 14, 2013 <br />
                    <input id="ship-both" name="update-ship" type="radio" value="update-both" /> Make changes to both the shipping address and shipping date
                </li>
                <li>                
                <label for="order-number"><em>*</em>Order Number (available in order confirmation email):</label> 
                    <input type="text" name="order-number">
                </li>             
                <li>                
                <label for="full-name"><em>*</em>Recipient Full Name:</label> 
                    <input type="text" name="full-name">
                </li>   
                <li id="address" style="display: none;">
                    <label for="address">
                        <em>*</em>Address
                    </label> 
                    <input type="text" name="address">
                    <label for="address2">
                        Address Line 2
                    </label> 
                    <input type="text" name="address2">
                </li>
                <li id="address2" style="display: none;">
                    <label for="city">
                        <em>*</em>City
                    </label> 
                    <input type="text" name="city">
                    <label for="state">
                        <em>*</em>State
                    </label> 
                    <select name="state">
                        <option value="AL">Alabama</option>
                        <option value="AK">Alaska</option>
                        <option value="AZ">Arizona</option>
                    </select>
                    <label for="zip">
                        <em>*</em>Zip Code
                    </label> 
                    <input type="text" name="zip">
                </li>
                <li id="new-ship-date"  style="display: none;">
                    <em>*</em><label for="update-ship">New Ship Date:</label>
                    <input type="text" id="datepicker" />
                </li>            
                <li>
                    <label for="phone">
                        <em>*</em>Phone (for delivery quetsions)
                    </label> 
                    <input type="text" name="phone">
                </li>               
            </ul>
                   <input type="submit" id="button" name="submit" class="green">

          </form>
4

2 に答える 2

1

アイテムを選択的に非表示および表示するのではなく、ラジオ ボタンのみをターゲットにする場合は、「すべて非表示にしてから特定のリストを表示する」アプローチに従うことをお勧めします。else{hide...}これにより、すべての句を取り除くことができ、コードがより保守しやすくなります。次のコードを試してください

        $('#pancettaForm').change(function () {

           //hide all optional li's
           $('#address,#address2,#new-ship-date').hide();

           //and then show which one is necessary
           if ($('#ship-address').prop('checked')) {
              $('#address').show();
           }

           else if ($('#ship-date').prop('checked')) {
              $('#new-ship-date').show();
           }

           else if ($('#ship-both').prop('checked')) {
              $('#address, #new-ship-date').show();
           }
        });

else ifの代わりに にも注意してifください。特定のインスタンスでチェックelse ifできるラジオ ボタンは 1 つだけであるため、このコードは次の場合にも機能します。セレクターがラジオ ボタンでのみ機能するように変更したことに注意してください。

アップデート

$('pancettaForm').change(...)上記のコードは今のところその仕事をしていますが、テキストボックスの値が更新された場合など、フォームが何らかの方法で変更された場合に実行されることを意味することに注意する必要があります。今のところ、追加の処理が発生するだけです。この潜在的な問題を取り除くには、上記のコードを次のコードに置き換えることができます

       $('#pancettaForm').change(function (ev) {

           //execute this block only if one of the radio button from "update-ship" group has changed
           if (ev.target.name == 'update-ship') {

              //hide all optional li's
              $('#address,#address2,#new-ship-date').hide();

              //and then show which one is necessary
              if ($('#ship-address').prop('checked')) {
                 $('#address').show();
              }

              else if ($('#ship-date').prop('checked')) {
                 $('#new-ship-date').show();
              }

              else if ($('#ship-both').prop('checked')) {
                 $('#address, #new-ship-date').show();
              }
           }
        }); 
于 2013-05-01T17:56:45.767 に答える
0

これは、最後の if ステートメントで要素を隠しているためです。

 $('#address, #new-ship-date').hide();

これは false を返します (そのため、要素の 1 つが表示された直後に再び非表示になります):

if ($('#ship-both').prop('checked'))
于 2013-05-01T17:51:40.067 に答える