JQuery Hide Option не работает в IE и Safari - PullRequest
17 голосов
/ 04 декабря 2011

Я пытаюсь скрыть несколько опций в выпадающем списке, используя .hide ().Это прекрасно работает в Firefox и Chrome, но не работает в IE и Safari.Мой оригинальный код более сложный, но я сузил его до этого.

Я пробовал несколько комбинаций, но ничего не получалось.

.hide () работает, но по каким-то причинам не относится к тегам параметров.

Может кто-нибудь помочь мне?Это сводит меня с ума.Большое спасибо за то, что уделили время!

Вот мой jscript:

    <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $(".wrapper1").hide();
        });
    </script>

Вот HTML:

                <label for="prodName">Product Name:</label> 
                <input type="text" name="prodName" /><br />

                <label for="candy">Candy:</label> 
                <select name="candy" id="candy">
                        <option value="0" class="blank" selected="selected"></option><!-- PHP and JS validators should not allow "0" here. User should be prompted to select something. -->
                        <option value="1" class="wrapper1">Hide this 1</option>
                        <option value="2" class="wrapper1">Hide this 2</option>
                        <option value="3" class="wrapper2">Show this 1</option>     
                </select><br />

Ответы [ 6 ]

11 голосов
/ 18 июня 2013

Это будет работать .. измените .show на .showOption и .hideOption. Однако это все еще отстой в IE, потому что в Firefox вы можете скрыть выбранную опцию. Так что, если «Выбрать один» отображается и скрыт. Firefox все равно скажет «выбери один».

$.fn.showOption = function() {
this.each(function() {
    if( this.tagName == "OPTION" ) {
        var opt = this;
        if( $(this).parent().get(0).tagName == "SPAN" ) {
            var span = $(this).parent().get(0);
            $(span).replaceWith(opt);
            $(span).remove();
        }
        opt.disabled = false;
        $(opt).show();
    }
});
return this;
}
$.fn.hideOption = function() {
this.each(function() {
    if( this.tagName == "OPTION" ) {
        var opt = this;
        if( $(this).parent().get(0).tagName == "SPAN" ) {
            var span = $(this).parent().get(0);
            $(span).hide();
        } else {
            $(opt).wrap("span").hide();
        }
        opt.disabled = true;
    }
});
return this;
}
8 голосов
/ 04 декабря 2011

Ты прав. Некоторые браузеры просто не позволяют скрывать option элементы. Скорее всего, вам придется их удалить.

Хотя, возможно, лучшей (или хотя бы альтернативной) возможностью было бы их отключить.

$(".wrapper1").prop('disbled', true);
5 голосов
/ 04 декабря 2011

Вы должны удалить элементы option. Скрытие их с помощью display:none не поддерживается во многих браузерах.

HIDE

var elems = $(".wrapper1").remove();

SHOW

$('#candy').append(elems);
4 голосов
/ 22 января 2014

Я попробовал решение, которое использует <span> вокруг параметров, но обнаружил, что оно не работает для меня во всех браузерах.

Я создал плагин jQuery, который очень хорошо это решает. С этим вы бы сделали это:

$('#selection1').hideOption('1');
$('#selection1').showOption('1');

Вы можете скрывать и показывать их столько, сколько хотите, и они сохранят свой первоначальный порядок и любые значения .data('x'), которые вы присвоили option. Работает во всех браузерах. Вы можете видеть это в этом примере: jsFiddle - параметры раскрывающегося списка

Вы можете получить подключаемый модуль Toggle Dropdown Options . Если вам не нравятся плагины, просто скопируйте код JavaScript из него в файл JavaScript вашего собственного проекта. См. Прочтите ссылку Docs на плагин для получения дополнительной информации!

1 голос
/ 11 мая 2016

Я нашел один обходной путь для этого: просто оберните с помощью Jquery wrap ()) для опции, которую вы хотите скрыть, он будет скрыт автоматически и развернет span с помощью unwrap (), чтобы показать его снова.

0 голосов
/ 09 апреля 2014

Я пытался разными способами, но это решение кажется разумным, и я использовал в своем коде.Не требуется никаких плагинов. Простая функция регистрации с объектом jquery

Краткий обзор решения:

(function ($) {


$('#showOne').click(function () {
    $('#ddlNumbers').showHideDropdownOptions('3', true);
});

$('#hideOne').click(function () {
    $('#ddlNumbers').showHideDropdownOptions('3', false);
});

 $.fn.showHideDropdownOptions = function(value, canShowOption) { 

         $(this).find('option[value="' + value + '"]').map(function () {
            return $(this).parent('span').length === 0 ? this : null;
        }).wrap('<span>').hide();

        if (canShowOption) 
            $(this).find('option[value="' + value + '"]').unwrap().show();
        else 
            $(this).find('option[value="' + value + '"]').hide();

}



})(jQuery);

Вот полная реализация http://jsfiddle.net/8uxD7/3/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...