2012-02-28 21 views
6

Mam problem w moim kodzie jquery. Chcę utworzyć listę rozwijaną kaskadową za pomocą jquery. Poniżej znajduje się mój kod.

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> 

kod jquery Kod

$().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(); 
     }); 
     } 
    }); 
}); 

działa poprawnie w chrome and FF ale nie pracuje w IE7 & IE8. .hide() nie działa w IE7 and IE8

Proszę pomóż mi się go pozbyć.

góry dzięki

ODPOWIEDŹ: (podane przez Paulo Rodrigues)

kod JS:

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(); 
       } 
      } 
     }); 
    } 
}); 
+0

zduplikowane [Ukrywanie wybrać opcję IE jQuery] (http://stackoverflow.com/questions/2031740/hide-select-option-in -ie-using-jquery) (i wiele innych). Najwyraźniej nie możesz ukryć opcji w IE, musisz je usunąć i ponownie dodać później (np. '.detach()' i '.append()'). – nnnnnn

+0

Masz dodatkowe '});' na końcu. Jest to błąd składniowy. – footy

+0

sprawdź ten http: //forum.jquery.com/topic/hide-problem-on-ie8 –

Odpowiedz

6

.hide() zmieni styl wyświetlania sobie równych, a IE nie pozwalają to. Polecam więc usunąć ten element.

+0

Usuwam ten element zgodnie z twoją sugestią, ale jaka jest dla niego alternatywa? Co będę używał zamiast tego? – pkachhia

+1

@Chicko Bo jeśli usuniesz element w "ukryj", musisz ponownie utworzyć w "show". Sprawdź [ten kod] (http://jsfiddle.net/PXTk7/1/). –

+0

Bardzo dziękuję, rozwiązałeś mój problem – pkachhia

0

Czy można po prostu zrobić $ (this) .css ("display", "none"); ?

+0

To w zasadzie działa '.hide()' i nie działa w IE. Spójrz na pytanie: [Ukryj opcję zaznaczenia w IE używając jQuery] (http://stackoverflow.com/questions/2031740/hide-select-option-in-ie-using-jquery) – nnnnnn

+0

Już wypróbowałem to, nie działa, dziękuję za pomoc – pkachhia

+0

Moja zła. Co powiesz na .css ("widoczność", "ukryty")? – Luc

1

Użyj .detach() w jquery.

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(); 
     }); 
    } 
});​ 
+0

Próbowałem twojego kodu działa raz, ale nie po raz drugi. Dzięki za pomoc – pkachhia

+0

Mam na myśli, że gdy wybierzesz firmę1, działa ona poprawnie, ale gdy wybierzesz drugi raz, wybierz firmę1, nie daje tego samego wyniku. – pkachhia

+0

OK dziękuję, czekam na odpowiedź – pkachhia

0

Wolnostojący sposób jest o wiele bardziej skomplikowany sposób ... jeśli sklonować opcje (wszystkie opcje), a następnie dołączyć do wybierz opcje w zależności od wartości w onChange dokument gotowy, a nie usunąć() opcje, których nie chcesz związane z początkowego wyboru - w moim przypadku był to kraj do państw, ale dla przykładu rozwijanej własnego wyboru w celu określenia wartości Dwójki rozwijane ...

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

Zasadniczo masz i jeszcze, jeśli dla każdej wartości szukasz ... są inne sposoby, ale wydaje się to być najprostsze i można to zrobić w bardziej intuicyjny sposób, więc nie musisz określać inaczej, jeśli nie moim celem nie musiałem kopać tak głęboko, to był USA, Kanada lub tak ...

+0

jeśli to możliwe, możesz podać link jsfiddle dla swojego przykładu? – pkachhia

0

@pkachhia -> Mam znaleźć rozwiązanie, które działa dobrze dla mnie w IE8.Plz daj mi znać to to pomocne dla ciebie. Dziękuję.

jsfiddle.net/NehaBajoria/22pW4/

+0

Dziękuję Neha za twój wysiłek, ale jak widać powyżej, mam już wcześniej odpowiedź. – pkachhia

Powiązane problemy