IE9状态/商店选择选项不会追加

时间:2013-01-02 17:54:50

标签: javascript jquery drupal

我在IE9及以下版本遇到麻烦的javascript错误。我有两个选择框。一个是“选择你的状态”框。此选择过滤该状态中选择选项的选项。

它在我尝试过的所有内容中都可以正常工作但是IE。正如您在HTML示例中看到的那样,这些选项包含在optgroups中。我在document.ready上创建了一个选项对象,然后从DOM中删除它们。在更改状态选择框时,我将带有optgroups的选项子集放入存储选择中。但是,IE只放置了optgroups,而不是选项。我尝试了几种不同的方法将元素附加到选择中,但IE不会附加optgroups的子选项。

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

<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:

<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参数是所有optgroups和选项的对象。此功能可过滤并附加它们。

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));
    });  
}

谢谢!

1 个答案:

答案 0 :(得分:0)

我编写了一些代码来测试从一个选择中抓取optgroup并将它们放在另一个选择中。以下似乎在IE9中运行良好,使用jquery 1.4.4。我现在的理论是问题不在于函数,而在于你传递的参数。

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