2011-11-17 17 views
9

Powiel możliwe:
Hide select option in IE using jQueryUkryj opcje w elemencie select, nie działa w IE?

Więc jak widać poniżej, mam dwóch wybranych elementów. Pierwsza z nich ma dwie wartości: 1,4 i 1,7. W zależności od wybranej opcji chcę wyłączyć pewne opcje w drugim zaznaczonym elemencie. Działa doskonale w chromie, ale IE jest suką (jak zwykle!).

Jakieś pomysły, co jest nie tak?

<p> 
    <label style="width: 155px; display: inline-block;">Height</label> 
    <select name="height"> 
     <option value="1.4">1.4</option> 
     <option value="1.7">1.7</option> 
    </select> 
</p> 
<p> 
    <label style="width: 155px; display: inline-block;">Amount</label> 
    <select name="slanor"> 
     <option class="four" value="2">2</option> 
     <option class="four seven" value="3">3</option> 
     <option class="seven" value="4">4</option> 
    </select> 
</p> 


<script> 
$(document).ready(function() { 
    check(); 

    $('select[name=height]').change(function() { 
     check(); 
    }); 

    function check() { 
     var slanor = $('select[name=slanor]'); 
     var currHeight = $('select[name=height]').val(); 

     if(currHeight == '1.4') { 
      slanor.find('option').hide(); 
      slanor.find('.four').show(); 
     } else { 
      slanor.find('option').hide(); 
      slanor.find('.seven').show(); 
     } 
    } 
}); 
</script> 
+0

Co nie działa? Czy ma odpowiednią wartość wysokości? (Uruchom 'console.log (currHeight)', aby się tego dowiedzieć.) – lonesomeday

+0

Przestań oznaczać swoje tytuły, proszę. Jesteś tu już od prawie dwóch lat! –

Odpowiedz

12

Pojęcie ukrytego options w select nie istnieje w IE. Będziesz musiał ręcznie usunąć i ponownie dodać wpisy, co może być nieco niedogodne.

Innym rozwiązaniem byłoby również wyłączyć elementy:

slanor.find(option).hide().prop('disabled', true); 

To ukryje opcję we wszystkich przeglądarkach, które go obsługują, ale go wyłączyć w IE, co oznacza, że ​​będzie ona nadal być widoczny, ale wizualnie odróżnić od innych opcji i nie można ich wybrać.

Jednak: czy problem jest dokładnie tak, jak zostały opisane, a tam są tylko dwie opcje, że skrypt będzie zmieniać się na najprostszym rozwiązaniem mogłoby być hide i show dwóch różnych rozwijanego menu w całości, w zależności, która opcja jest wybrany.

+1

Hmm, tak, to by działało. Próbowałem ustawić go wyłączony, ale nie wydaje się działać w IE 7/6. Chciałbym mieć wsparcie przynajmniej na IE 7. Domyślam się, że jedyną opcją jest posiadanie dwóch wybranych pól. Dzięki! – qwerty

1

Wywołanie funkcji .hide() w jQuery powoduje wyświetlenie: brak elementu. Wątpię, czy to standardowy HTML, w którym można ukryć opcje w ten sposób.

Można użyć tego kodu, zamiast:

slanor.empty(); 
if (currHeight == '1.4') { 
    slanor.append($('<option'>).val('2').text('2')); 
    slanor.append($('<option'>).val('3').text('3')); 
} 
else { 
    slanor.append($('<option'>).val('3').text('3')); 
    slanor.append($('<option'>).val('4').text('4')); 
} 
+0

Możesz znaleźć pożądaną odpowiedź na ten post: - http://stackoverflow.com/questions/29690181/how-to-disable-hide-select-options-using-css-in-ie/29690622#29690622 – Nitesh

0

Opcja tag nie obsługuje wyświetlania atrybutu css. Właśnie to robi show()/hide(). Najlepiej jest usunąć i ponownie utworzyć opcje, gdy są potrzebne. Albo myślę, że możesz dołączyć je do innego ukrytego przedmiotu i odciągnąć je, gdy będziesz ich potrzebował.

Więc trzeba coś

$("option").appendTo($("#myhiddenselect")); 
$(".four").appendTo($("#myvisibleselect"));