代码之家  ›  专栏  ›  技术社区  ›  earlyriser

依赖Jquery的下拉列表在IE中不起作用

  •  4
  • earlyriser  · 技术社区  · 16 年前

    我有3个下拉列表:国家、州和城市。

    州和城市依赖于前面的表单,并通过AJAX加载。

    在Firefox和Chrome中一切正常,但在IE(我的例子是8)中,当我选择一个州时,城市下拉列表不会被加载。好像我没察觉到变化。这不是负载问题,因为我用一个简单的警报框进行了测试。

    加载的状态页面类似于:

    <select id="woeid_state">
    <option value="1">Alabama</option>
    <option value="2">Florida</option>
    </select>
    

    加载的城市页面类似于:

    <select id="woeid_town">
    <option value="100">Miami</option>
    <option value="101">Orlando</option>
    </select>
    

    $(document).ready(function()
     {
        function loadStates( parent_woeid )
        {
            $('#states').load("<?php echo $states_page?>"+parent_woeid);
            return false;           
        }
    
        function loadCities( parent_woeid )
        {
            $('#towns').load("<?php echo $cities_page;?>/admin1/"+parent_woeid);
            return false;           
        }   
    
        $("#woeid_country").change(function()
        {
            //alert("I am an alert box");
            var country = $("select#woeid_country").val();
            loadStates ( country);
        });
    
        $("#states").change(function()
        {
            //alert("I am an alert box");
    
            var admin1 = $("select#woeid_state").val();
            loadCities ( admin1 );
        }); 
    
    });     
    

                <form class="ordinary_form" method="post" action="">
                    <label>Country</label>
    
                    <select name="woeid_country" id="woeid_country">
                                            <option value="23424975">United Kingdom</option>
                                            <option value="23424977">United States</option>
                                            <option value="23424979">Uruguay</option>
                                            <option value="23424980">Uzbekistan</option>
                                            <option value="23424907">Vanuatu</option>
                                            <option value="23424982">Venezuela</option>
                                            <option value="23424984">Vietnam</option>
                                        </select>
    
                    <label>State/Province</label>
                    <div id="states"></div>
    
                    <label>City</label>
                    <div id="towns"></div>
            </form>
    

    更新:usign JQuery 1.3

    解决方案:由Daniel带来:替换.change for.click

    2 回复  |  直到 16 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    这是违反直觉的,但你需要使用 .click() 而不是 .change() . Internet Explorer不会启动 change 改变

    请参阅此相关的堆栈溢出问题: Getting jQuery to recognise .change() in IE

        2
  •  0
  •   Mark Schultheiss    16 年前

    这可能是因为您在原始javascript运行(并分配.change()事件)之后加载状态。

    $("select#woeid_state").live('change', function() {
        var admin1 = $("select#woeid_state option:selected").val(); 
        loadCities ( admin1 ); 
    });
    

    以在“选择”选项卡上捕获事件。 编辑:输入代码的其余部分

    另请注意:添加事件时,请选择:

    function AddSelectStateEvent()
    {
    $("select#woeid_state").change(function() { 
        var admin1 = $("select#woeid_state option:selected").val();  
        loadCities ( admin1 );  
    }); 
    };
    

    在此处添加选择:

    AddSelectStateEvent();