我在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。
<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参数是所有optgroup和options的对象。此函数用于过滤和附加它们。
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));
});
}
谢谢!
发布于 2013-01-04 02:35:27
我稍微编辑了一下代码,以测试从一个select中抓取optgroup并将其放入另一个select中。下面的代码在jQuery1.4.4的IE9中似乎工作得很好。我现在的理论是,问题不在于函数,而在于你传入的参数。
<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>
https://stackoverflow.com/questions/14126783
复制相似问题