Скрытие параметров выбора с помощью JQuery - PullRequest
7 голосов
/ 15 января 2011

Хорошо, давайте начнем с примера.
Имейте в виду, это только пример.

<select id = "selection1">
<option value = "1" id = "1">Number 1</option>
<option value = "2" id = "2">Number 2</option>
<option value = "3" id = "3">Number 3</option>
</select>

Теперь у нас есть выпадающий список с 3 вариантами.
Теперь я хочу скрыть параметр.

Добавление style = "display:none" поможет , а не справке.
Параметр не будет отображаться в раскрывающемся списке, но с помощью клавиш со стрелками его все равно можно выбрать.
По сути, онделает именно то, что говорит код.Он не отображается и останавливается там.

Функция JQuery $("#1").hide() не будет работать.
Плюс, я не только хочу скрыть эту опцию, я хочу полностью удалить ее.

Есть ли возможность сделать это?
Нужно ли использовать элементы parent / sibling / child?Если так, я все еще не уверен, как.

Любая помощь по этому вопросу будет принята с благодарностью.Спасибо.

Еще один вопрос - это связано

Хорошо, поэтому я обнаружил, что в JQuery есть .remove().Хорошо работает.
Но что, если я хочу вернуть его?

if (условие)
{
$ (this) .remove ();
}

Я могу зациклить это.Не должно быть сложно.
Но вот что я пытаюсь сделать, это:

Максимальная вместимость класса: (Поле ввода здесь)
Выбор комнаты: (Выпадающий здесь)

Что я хотел бы для этого сделать, так это обновить Dropdown, используя такую ​​функцию, как .change() или .keyup.
Я мог создать раскрывающийся список только после того, как что-то было напечатано,При изменении или вводе ключа выполните раскрывающееся меню соответствующим образом.
Но я делаю следующее:

$ roomarray = mysql_query ("SELECT *
FROM
(* 1068)* SELECT *,
CASE
КОГДА тип = 'Классная комната' ТОГДА 1
КОГДА тип = 'Компьютерная лаборатория' ТОГДА 2
КОГДА тип = 'Лекционный зал' ТОГДА 3
КОГДА тип = 'Аудитория 'THEN 4
END AS ClassTypeValue
ИЗ комнат
) t
ORDER BY ClassTypeValue, maxppl, roomID ");

echo "<select id = \"room\">";

while ($rooms = mysql_fetch_array($roomarray))
    { ?>
    <option value=<?php echo $rooms['roomID']; ?> id=<?php echo $rooms['roomID']; ?>><?php echo $rooms['type']; echo "&nbsp;"; echo $rooms['roomID']; echo "&nbsp;("; echo $rooms['maxppl']; echo ")"; ?></option>
    <?php
    }

echo "</select>";

Да, я знаю, что это очень грязно.
Я планирую изменить это позже.

Но проблема сейчас заключается в следующем: можно ли переключить удалениеиз вариантов в соответствии с тем, что было введено?
Можно ли сделать это с выпадающим списком из цикла?Потому что, черт возьми, я не могу продолжать выполнять SQL-запросы.Или это даже вариант?Потому что, если это возможно, я все еще думаю, что это плохо.

Ответы [ 6 ]

7 голосов
/ 15 января 2011

Hide () не работает для Chrome ... Я экспериментировал с обходным путем и обернул его в плагин, который я назвал "ExtraBox".Идея состоит в том, чтобы сохранить параметры временно, чтобы мы могли включить / отключить их, манипулируя DOM.Я создал плагин, чтобы его было проще использовать.

Я разместил код на jsFiddle, так что вы можете попробовать его сами: http://jsfiddle.net/KeesCBakker/HaFRC/. [note: первый проект в jsFiddle,Мне это нравится!]

Пример HTML:

Select:
<br/>
<select id="TestKees">
    <option value="1" class="s1">First value</option>
    <option value="2" class="s2">Second value</option>
    <option value="3" class="s3">Third value</option>
</select>
<br/>
Enable / Disable
<br/>
<input id="txt" type="text" value="s2" />
<button id="btnEnable">Enable</button>

Я добавил следующий jQuery в свою функцию document.ready:

$('#TestKees').extraBox({ attribute: 'class' });

$('#btnEnable').click(function(){
    $('#TestKees').data('extraBox').enable(
        $('#txt').val()
    );
});

$('#btnDisable').click(function(){
    $('#TestKees').data('extraBox').disable(
        $('#txt').val()
    );  
});

Плагинвыглядит так:

(function($) {

    // Create ExtraBox object
    function ExtraBox(el, options) {

        // Default options for the plugin (configurable)
        this.defaults = {
            attribute: 'class'
        };
        // Combine default and options objects
        this.opts = $.extend({}, this.defaults, options);

        // Non-configurable variables
        this.$el = $(el);
        this.items = new Array();
    };

    // Separate functionality from object creation
    ExtraBox.prototype = {

        init: function() {
            var _this = this;
            $('option', this.$el).each(function(i, obj) {
                var $el = $(obj);
                $el.data('status', 'enabled');
                _this.items.push({
                    attribute: $el.attr(_this.opts.attribute),
                    $el: $el
                });
            });
        },
        disable: function(key){
            $.each(this.items, function(i, item){
                if(item.attribute == key){
                     item.$el.remove();
                     item.$el.data('status', 'disabled'); 
                } 
            });
        },
        enable: function(key){
            var _this = this;
            $.each(this.items, function(i, item){
                if(item.attribute == key){

                    var t = i + 1; 
                    while(true)
                    {
                        if(t < _this.items.length) {   
                            if(_this.items[t].$el.data('status') == 'enabled')  {
                                _this.items[t].$el.before(item.$el);
                                item.$el.data('status', 'enabled');
                                break;
                            }
                            else {
                               t++;
                            }   
                        }
                        else {                                                                               _this.$el.append(item.$el);
                            item.$el.data('status', 'enabled');
                            break;
                        }                   
                    }
                } 
            });     
        }
    };

    // The actual plugin - make sure to test
    // that the element actually exists.
    $.fn.extraBox = function(options) {

        if (this.length) {
            this.each(function() {
                var rev = new ExtraBox(this, options);
                rev.init();
                $(this).data('extraBox', rev);
            });
        }
    };
})(jQuery);
3 голосов
/ 15 января 2011

Зачем вам возиться с настройками дисплея, если вы просто хотите удалить элемент?

$('#1').remove();

и его больше нет.

1 голос
/ 20 мая 2017

Это очень просто в Jquery

//For Hide
$('#selection1 option[value=1]').hide();

//For Show
$('#selection1 option[value=1]').show();
1 голос
/ 18 января 2014

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

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

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

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

1 голос
/ 15 января 2011

Полагаю, ваш селектор неверен.Попробуйте что-то вроде этого (обновлено):

<html>
    <head>
        <title>MooExample</title>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $("#click").click(function() {
                    $("#selection1 #1").remove();
                    //$("#selection1 > #1").toggle(); // Hide OR show
                });
            });
        </script>
    </head>

    <body>
        <select id="selection1">
            <option value="1" id="1">Number 1</option>
            <option value="2" id="2">Number 2</option>
            <option value="3" id="3">Number 3</option>
        </select>
        <input type="button" id="click" onclick="moo()" value="click" />
    </body>
</html>

См. родительский-дочерний селектор (parent> child).

1 голос
/ 15 января 2011

Насколько я знаю, это невозможно изначально. Вы можете disable <option> узел Тхо. Чтобы полностью скрыть / удалить это вам нужно будет написать некоторый пользовательский код.

$('option').attr('disable', true);

Кстати, вы не должны использовать один число в качестве идентификатора для элемента. использование какой-то префикс, то есть option_1.

на самом деле можно скрыть узел <option>, но он не совместим с разными браузерами.

...