简单链接选择菜单错误

时间:2014-11-06 07:42:28

标签: javascript jquery html

我有一个简单的jQuery选择菜单,根据选择显示内容。

这是我的jsFiddle&我的代码如下。

错误#1 :当我最初选择US时,State下拉列表不会显示。我必须首先选择UK,然后选择US才能启动。为什么?

Bug#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>

1 个答案:

答案 0 :(得分:2)

第一个选择中没有出现'状态'下拉列表的第一个问题是因为某些原因你有嵌套的change()处理程序,因此在第二次选择之前不会触发该事件。

其次,您可以通过连接从下拉列表中选择的状态的显示div的选择器来缩短代码,如下所示:

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

我还对代码进行了一些改进,例如删除不必要的循环和缓存选择器:

$('#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