2014-11-06 33 views
1

我有一個簡單的jQuery選擇菜單,根據選擇顯示內容。簡單的鏈式選擇菜單錯誤

這是我的jsFiddle &我的代碼如下。

錯誤#1:當我最初選擇US時,State下拉列表不出現。在此之前,我必須先選擇UK,然後再選擇US。爲什麼?

錯誤#2:現在,我使用的是: if(jQuery('#statecat').val()=="ak") jQuery('.ak').show(); }); - 有沒有更有效的方式來做到這一點,所以我沒有對所有50個州這樣做呢?

錯誤#3:當我從Alaska回去Choose a State...,該US結果是空白。爲什麼?

非常感謝任何幫助。

CODE

<form method="get" action="/" id="languageSwitch"> 
     <fieldset> 

      <select name='cat' id='cat' class='postform' > 
       <option value='0' selected='selected'>Choose a country&#8230;</option> 
       <option class="level-0" value="united-kingdom">United Kingdom</option> 
       <option class="level-0" value="us">US</option> 
      </select> 
      <script type="text/javascript"> 
       jQuery('#cat').change(function(){ 
        jQuery('#cat').change(function() { 
         jQuery("#statecat").toggle(jQuery(this).val() == "us"); 
        }); 

        if(jQuery('#cat').val()=="0") 
        jQuery('form#languageSwitch').siblings('div').show(); 
         else{ 
         jQuery('form').siblings('div').hide(); 
         jQuery('.'+jQuery('#cat').val()).show(); 

         } 
        }); 
      </script> 

     </fieldset> 
    </form> 

    <form method="get" action="/" id="stateSwitch"> 
     <fieldset> 

      <select name='statecat' id='statecat' class='postform' > 
       <option value='0' selected='selected'>Choose a state&#8230;</option> 
       <option class="level-0" value="ak">Alaska</option> 
       <option class="level-0" value="wy">Wyoming</option> 
      </select> 

      <script type="text/javascript"> 
       jQuery('#statecat').change(function(){ 
        jQuery('.state1').each(function(){jQuery(this).hide(); }); 
        if(jQuery('#statecat').val()=="ak") 
         jQuery('.ak').show(); 
       }); 
      </script> 

     </fieldset> 
    </form> 

    <div class="united-kingdom"> 
     <h2>United Kingdom</h2> 
    </div> 

    <div class="us"> 
     <h2>US</h2> 
     <div class="ak state1"> 
      <h2>Alaska</h2><ul>     
      <li class="animal-listing" id="post-123"> 
       <a href="http://localhost:8888/test/wordpress/company/kiwi-kompany/">Alaska Test</a><br /> 
       Address:<br />Address<br /> 
       Country: Alaska<br /> 
       URL: http://www.somesite.co.nz<br /> 
       Telephone: 01902<br /> 
       Fax: 01293 
      </li> 
     </div> 

     <div class="wy state1"> 
      <h2>Wyoming</h2> 
     </div> 

    </div> 

回答

2

的而不會出現在第一選擇是因爲某種原因,你已經嵌套change()處理程序的「狀態」下拉列表中,那麼該事件沒有被解僱,直到第二的第一個問題選擇了。

$('.' + $('#statecat').val()).show(); 

我還包括了一些改進你的代碼,如:

其次,你可以爲國家的顯示DIV從下拉列表中的值來選擇這樣的串聯選擇縮短你的代碼去除不必要的循環和緩存選擇:

$('#cat').change(function() { 
    var val = $(this).val(); 
    $("#statecat").toggle(val == "us"); 

    if (val == "0") 
     $('#languageSwitch').siblings('div').show(); 
    else { 
     $('form').siblings('div').hide(); 
     $('.' + val).show(); 
    } 
}); 

$('#statecat').change(function() { 
    $('.state1').hide(); 
    $('.' + $(this).val()).show(); 
}); 

Updated Fiddle

+0

哇,你去哪兒了我所有的生活? :-D 這很好用,Rory!最後的錯誤,爲什麼當我從「阿拉斯加」回到「選擇一個國家......」美國結果消失的時候呢?我在你的jsfiddle上試過了,問題依然存在。幫幫我? – michaelmcgurk 2014-11-06 07:55:01

+1

這是因爲'Choose a state ...'的值是'0',並且沒有'.0' div顯示。這肯定是正確的行爲 - 如果沒有選擇狀態,則不應顯示狀態,對嗎? – 2014-11-06 08:00:25

+0

這是一個有趣的觀點。我總是默認顯示全部。是否有可能調整我的代碼,讓這種情況發生?非常感謝。 – michaelmcgurk 2014-11-06 08:02:10