Скрытие параметров выбора с помощью JQuery


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

<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() не будет работать.
Кроме того, я не только хочу скрыть эту опцию, Я хочу полностью удалить ее.

Есть ли возможность сделать это?
Должен ли я использовать родительские/братские / дочерние элементы? Если так, то я до сих пор не знаю, как это сделать.

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

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

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

Если (условие)
    {
    $(этот).удалить ();
    }

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

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

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

$roomarray = mysql_query ("SELECT *
    Из
        (
        SELECT *,
        Дело
        Когда type = 'Classroom', то 1
        Когда type = 'компьютерная лаборатория', то 2
        Когда type = 'лекционный зал', то 3
        КОГДА type = 'Auditorium', то 4
        Конец как Classstypevalue
        Из комнат
        ) t
    Порядок по Classstypevalue, 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

6 ответов:

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

Я опубликовал код на jsFiddle, так что вы можете попробовать его сами: http://jsfiddle.net/KeesCBakker/HaFRC / . [Примечание: первый проект в 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.функция готовности:

$('#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);

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

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

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

Насколько мне известно, это невозможно. прирожденно. Вы можете disable an <option> узел Тхо. Чтобы полностью скрыть / удалить его вам нужно будет написать какой-то пользовательский код.
$('option').attr('disable', true);

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

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

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

<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>

Смотритеселектор родитель-потомок (родитель > потомок).

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

$('#selection1').hideOption('1');
$('#selection1').showOption('1');
Вы можете скрывать и показывать их столько, сколько захотите, и они сохранят свой первоначальный порядок. Он работает во всех браузерах. Вы можете видеть, что в этом примере: jsFiddle-переключить выпадающие опции

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

Это Очень Просто В Jquery

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

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