Преброяване на видимите падащи опции в opera и chrome, скриване на опцията за избор в IE

Имам падащ списък и бутон. Когато щракна върху бутона, искам да скрия избраната опция и когато няма повече налични опции - да скрия самото избиране. Доста просто НО... Този код (вижте по-долу и в jsfiddle ) не не работи с opera и chrome, но работи перфектно в mozilla. Под не работи имам предвид, че дължината на видимата опция винаги е 0. И така, как мога да преброя видимите опции за избор в тези браузъри? Няколко думи за IE: selectedOption.hide(); и други методи за скриване като selectedOption.display('none'); и selectedOption.style('display', 'none'); всъщност не скриват опцията... Как да направя това в IE?

<input type="button" value="Ckick" id="hide-option-button" />

<select id="my-select">
    <option value=""></option>
    <option value="1">option 1</option>
    <option value="2">option 2</option>
    <option value="3">option 3</option>    
</select>


$(document).ready(function(){

var button = $('#hide-option-button');
var dropDown = $('#my-select');

button.click(function(){
    var selectedOption = dropDown.find('option:selected');

    // Do nothing if empty option selected
    if (selectedOption.val() == '') return;

    // Remove selected option from drop down (just hide it to be able display it again after)
    selectedOption.hide();

    // Select first empty item to prevent glitch with displaying just selected and hided option in drop down
    dropDown.val('');

    if(shouldHideDropDown(dropDown))
    {
        dropDown.hide();
    }
});

function shouldHideDropDown(dropDown) {
    var visibleOptions = dropDown.children(':visible');
    console.log(visibleOptions.length);
    console.log(visibleOptions.size());
    return visibleOptions.length === 1;
}

});

P.S. Използвам Opera 17.0.1241.53, Chrome 30.0.1599.101 m, Mozilla Firefox 24.0, IE 10.0.920016721 работи на Windows 7 x64.


person Dmytro    schedule 05.11.2013    source източник


Отговори (2)


Преминах през лоши времена, когато се опитвах да приложа css стил върху html елементи с опции (опитвайки се да направя точно същото, което правите и вие).

Опитах се да използвам display:none, opacity:0 и дори да заменя стойността му на празна.

След като скриете опция, фокусирайте полето за избор и започнете да използвате клавиатурата. Ще видите, че дори когато опцията е скрита, опцията ще бъде показана!.

Трябваше да променя целия си код, за да заработи това. Решавам този проблем, като НЕ се опитвам да стилизирам елементи на html опции и започвам да използвам друг подход (javascript aux arrays).

person Felipe Miosso    schedule 05.11.2013

Това е грешка в chrome. Надявам се скоро да се решат.

person Yasir Aslam    schedule 24.01.2014