首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IE9状态/存储选择选项将不会追加

IE9状态/存储选择选项将不会追加
EN

Stack Overflow用户
提问于 2013-01-03 01:54:50
回答 1查看 214关注 0票数 0

我在IE9及更低版本中遇到了一个麻烦的javascript错误。我有两个选择框。一个是“选择你的州”框。此select将过滤处于该状态的select to选项的选项。

在我尝试过的所有东西中,除了IE,它都能正常工作。正如您在HTML示例中看到的,选项包含在optgroup中。我在document.ready上创建了一个选项对象,然后将它们从DOM中删除。在状态选择框改变时,我将带有optgroups的选项子集放入store select中。但是,IE只放置选项组,而不放置选项。我尝试了几种将元素附加到select的不同方法,但IE就是不会附加optgroup的子选项。

这里是简化的html和适用的javascript。这是一个Drupal站点,所以我使用的是jQuery 1.4.4。

代码语言:javascript
运行
复制
<select id="edit-state">
    <option value="AL">Alabama</option>
    <option value="AZ">Arizona</option>
    <option value="AR">Arkansas</option>
    <option value="CA">California</option>
</select>

假设选择了Arizona,这应该是第二个选择框的HTML:

代码语言:javascript
运行
复制
<select id="edit-store">
    <optgroup label="AZChandler">
        <option value="SPCHRAZ">Store Name</option>
    </optgroup>
    <optgroup label="AZPhoenix">
        <option value="SPPVAAZ">Store Name</option>
        <option value="SPSCTAZ">Store Name</option>
    </optgroup>
    <optgroup label="AZScottsdale">
        <option value="SPRNTAZ">Store Name</option>
    </optgroup>
    <optgroup label="AZTempe">
        <option value="SPTEMAZ">Store Name</option>
    </optgroup>
    <optgroup label="AZTucson">
        <option value="SPORAAZ">Store Name</option>
        <option value="SPSPEAZ">Store Name.</option>
        <option value="SPRRDAZ">Store Name</option>
    </optgroup>
</select>

这是javascript。此函数在#edit-state更改时调用。options参数是所有optgroup和options的对象。此函数用于过滤和附加它们。

代码语言:javascript
运行
复制
function setStateOptions(options){
  var stateabbr = jQuery('#edit-state').find('option').filter(':selected').attr('value');
    jQuery('#edit-store optgroup').remove();

    jQuery(options).each(function() {
        var label = jQuery(this).attr('label');
        var abbr = label.substr(0, 2);
        if(abbr == stateabbr){
          var clone = jQuery(this).clone();
          jQuery(clone).appendTo('#edit-store');
         }
    });
    //remove postal code abbr from beginning of optgroup labels.
    jQuery('#edit-store optgroup').each(function(){
        var optlabel = jQuery(this).attr('label');
        jQuery(this).attr('label', optlabel.substr(2));
    });  
}

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-01-04 02:35:27

我稍微编辑了一下代码,以测试从一个select中抓取optgroup并将其放入另一个select中。下面的代码在jQuery1.4.4的IE9中似乎工作得很好。我现在的理论是,问题不在于函数,而在于你传入的参数。

代码语言:javascript
运行
复制
<select id="edit-store">
    <optgroup label="AZChandler">
        <option value="SPCHRAZ">SPCHRAZ</option>
    </optgroup>
    <optgroup label="AZPhoenix">
        <option value="SPPVAAZ">SPPVAAZ</option>
        <option value="SPSCTAZ">SPSCTAZ</option>
    </optgroup>
    <optgroup label="AZScottsdale">
        <option value="SPRNTAZ">SPRNTAZ</option>
    </optgroup>
    <optgroup label="AZTempe">
        <option value="SPTEMAZ">SPTEMAZ</option>
    </optgroup>
    <optgroup label="AZTucson">
        <option value="SPORAAZ">SPORAAZ</option>
        <option value="SPSPEAZ">SPSPEAZ</option>
        <option value="SPRRDAZ">SPRRDAZ</option>
    </optgroup>
</select>​
<select id="Select2">
</select>
<script type="text/javascript">
    jQuery('#edit-store optgroup').each(
        function () {
            var label = jQuery(this).attr('label');
            var abbr = label.substr(2, 1);
            if (abbr == 'T') {
                var clone = jQuery(this).clone();
                jQuery(clone).appendTo('#Select2');
            }
        }
    );
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14126783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档