Скрытие параметров выбора с помощью 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 " "; echo $rooms['roomID']; echo " ("; echo $rooms['maxppl']; echo ")"; ?></option>
<?php
}
echo "</select>";
Да, я знаю, что это очень грязно.Я планирую изменить его позже.
Но теперь вопрос заключается в следующем: могу ли я переключить удаление опций в соответствии с тем, что было введено?
Возможно ли это сделать с выпадающим списком, сделанным из цикла? Потому что я, черт возьми, не могу продолжать выполнять SQL-запросы. Или это вообще вариант? Потому что, если это возможно, я все еще думаю, что это плохо.
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, который решает эту проблему очень хорошо. С его помощью вы сделаете следующее:
Вы можете скрывать и показывать их столько, сколько захотите, и они сохранят свой первоначальный порядок. Он работает во всех браузерах. Вы можете видеть, что в этом примере: jsFiddle-переключить выпадающие опции$('#selection1').hideOption('1'); $('#selection1').showOption('1');
Вы можете получить плагин Toggle Dropdown Options. Если вам не нравятся плагины, просто скопируйте код JavaScript из него в файл JavaScript вашего собственного проекта. Смотрите: прочитайте ссылку Docs на плагине для получения дополнительной информации!