$(this).hide()不处理IE8中的选项元素

时间:2012-02-28 12:03:51

标签: jquery internet-explorer

我的jquery代码有问题。我想使用jquery进行级联下拉列表。下面是我的代码。

HTML

<SELECT class="input_style" name="comp_dd" id="comp_dd">
    <option value="0">[Select]</option>
    <OPTION value="1">Company1</OPTION> 
    <OPTION value="2">Company2</OPTION> 
    <OPTION value="3">Company3</OPTION> 
    <OPTION value="4">Company4</OPTION> 
</SELECT>

<SELECT class="input_style" name="group_dd" id="group_dd">
    <option data-parent="-1" value="0">[Select]</option>
    <OPTION  data-parent="1,3"; value="1" >grp_f</OPTION> 
    <OPTION  data-parent="1,2"; value="2" >grp_e</OPTION> 
    <OPTION  data-parent="1,3,4"; value="3" >grp_t</OPTION> 
</SELECT>

jquery代码

$().ready(function() {  

    $('#comp_dd').change(function() {
       var parent = $(this).val();
      if(parent!=0)
      {
       $('#group_dd').children().each(function() {
         var listOfNumbers = $(this).data('parent');        
        if($(this).data('parent')!='-1')
        {   

             var numbers = listOfNumbers.split(',');            
             if(jQuery.inArray(parent, numbers)!=-1 )
             {               
                  $(this).show();
            }
            else
            {               

                 $(this).hide();

            }
        }       
       });
      }
      else
      {
        $('#group_dd').children().each(function() {
             $(this).show();
       });
      }
    });
});

代码正常运行到chrome and FF但无法在IE7&amp; IE8.hide()无法使用IE7 and IE8

请帮我摆脱它。

提前致谢

答案:(由Paulo Rodrigues提供)

js code:

var original = $('#group_dd').clone();

$('#comp_dd').change(function() {
    var parent = $(this).val();

    $('#group_dd').empty().append($(original).html());

    if (parent != 0) {
        $('#group_dd').children().each(function() {
            var listOfNumbers = $(this).data('parent');        
            if ($(this).data('parent')!='-1') {
                var numbers = listOfNumbers.split(',');

                if (jQuery.inArray(parent, numbers)==-1 ) {
                    $(this).remove();
                }
            }
       });
    }
});

5 个答案:

答案 0 :(得分:6)

.hide()会将样式显示更改为none,IE不允许这样做。所以我建议你删除这个元素。

答案 1 :(得分:1)

在jquery中使用.detach()

DEMO

$('#comp_dd').change(function() {
    var parent = $(this).val();
    if (parent != 0) {
        $('#group_dd').children().each(function() {
            var listOfNumbers = $(this).data('parent');
            if ($(this).data('parent') != '-1') {
                var numbers = listOfNumbers.split(',');
                if (jQuery.inArray(parent, numbers) != -1) {
                    $(this).show();
                }
                else {
                    alert($(this).val()+" detached");
                    $(this).detach();
                }
            }
        });
    }
    else {
        $('#group_dd').children().each(function() {
            $(this).show();
        });
    }
});​

答案 2 :(得分:0)

你可以做$(this).css('display','none'); ?

答案 3 :(得分:0)

分离的方式是一种更复杂的方式...... 如果您克隆选项(所有选项),然后根据文档就绪中的onchange的值将选项附加到选择,而不是删除()您不希望与该初始选择相关的选项 - 在我的情况下它是国家到州,但为了你的例子下拉一个选择确定下拉值两个值...

var cloneone = $('#IDVALUE option').clone();
var dropdown1_value = $('#dropdown1').val();
$('#dropdown1').change(function(){
if(dropdown1 == 'value you want here')
{
cloneone.appendTo('#dropdown2');
$('#dropdown2 option.OPTIONS_WITH_CLASS_YOU_WANT_TO_NOT_SHOW').remove();
}
});

基本上有,否则,如果您正在寻找的每个值... 还有其他的方法,但这似乎是最简单的,你可以用更直观的方式做到这一点,所以你不必指定其他,但为了我的目的,我不需要挖那么深,这是美国,加拿大或其他......

答案 4 :(得分:0)

@pkachhia - &gt;我找到了解决方案,在IE8.Plz中工作正常。让我知道它对你有用。谢谢。

  

jsfiddle.net/NehaBajoria/22pW4 /