#javascript #jquery #html #jquery-plugins
#javascript #jquery #HTML #jquery-плагины
Вопрос:
Как я могу получить расширяемый выпадающий список с несколькими вариантами выбора [в виде дерева]?
Например, из приведенного ниже снимка, если у меня есть вложенный список для животных [Кошка, корова и т.д.], Есть ли какой-либо плагин как таковой, который показывал бы знак , и при нажатии он показывал бы вложенный список в том же выпадающем списке, как древовидное представление?
Есть какие-нибудь советы?
Комментарии:
1. Я сомневаюсь, что плагин для этого существует, его не должно быть слишком сложно реализовать самостоятельно
2. Я согласен. У jQueryUI это есть. У YUI это тоже есть.
Ответ №1:
Я знаю, что вы не можете использовать только тег select. В вашем случае вам необходимо создать настраиваемое поле выбора.
- Это можно сделать, используя комбинацию html-тегов, точно так же, как плагин treeview из библиотеки JavaScript, такой как jQuery UI. Но вы прокомментировали @Edgar, что для этого нет функции множественного выбора.
- Также решением может быть внедрение плагинов flash или java.
Я предполагаю, что мое решение examples не дало вам именно то, что вы хотели. Я просто приведу простой пример, который может помочь ответить на ваш вопрос. Это делается для создания настраиваемого поля выбора.
Настраиваемое поле выбора
Как создать настраиваемое поле выбора:
-
Создайте div, который будет контейнером списка.
<div id="treeSelect">
-
Добавьте стиль в div, который будет вести себя как поле выбора.
#treeSelect{height: 100px;width: 150px;border: 1px solid #000;overflow: auto;}
-
Добавьте содержимое основного списка вместе с подсписком в div. Включите все возможные стили, которые можно использовать для форматирования содержимого, чтобы оно больше походило на древовидный список.
<span class="mainList">All</span> <br /> <span class="expand" onClick="expand('animals', this);">[ ]</span><span class="mainList">Animals</span> <br /> <ul id="animals" class="subList"> <li><input type="checkbox" name="animals" value="Cat">Cat</li> <li><input type="checkbox" name="animals" value="Cow">Cow</li> <li><input type="checkbox" name="animals" value="Cat">Dog</li> </ul>
-
Добавьте скрипт, который будет обрабатывать способ просмотра подсписка.
функция расширения (список, просмотр){
var listElement = document.getElementById(list); var defaultView = '[ ]'; if(view.innerHTML == defaultView){ listElement.style.display = "block"; view.innerHTML = '[-]'; } else { listElement.style.display = "none"; view.innerHTML = '[ ]'; }
}
Я не могу поместить весь код, поэтому, пожалуйста, смотрите полный код в jsfiddle.
Я знаю, что это не совсем то, что вы хотели, но я думаю, это близко к тому, что вам нужно. Вы можете изменить стиль в зависимости от вашего вкуса и потребностей. Я надеюсь, что это может помочь и дать вам представление о том, как решить ваш вопрос.
Комментарии:
1. Это похоже на то, что я ищу! Но с одной проблемой, из-за которой я не могу выбрать родительский элемент. Я думаю, что плагин JS Tree — это правильный путь …. но мне не нравятся флажки, я бы предпочел, чтобы они были как список с несколькими вариантами выбора!
2. С некоторыми изменениями и дополнительными CSS и JS вы можете получить желаемый внешний вид. Я не сделал его похожим на то, что вы хотели, потому что там много чего нужно сделать. С родительским вы также можете добавить к нему флажок. Я знаю, вы спросите о флажке, но у меня нет времени, чтобы сделать его похожим на множественный выбор. Вы можете настроить это, скрыв флажок, затем добавить
onClick
событиеli
, которое будет проверяться, и снять с него флажок. Вы также меняетеli
фон, выбран он или нет. Опять же, предстоит еще много чего сделать, но это хорошее начало. Я надеюсь, что вы справитесь с остальным.
Ответ №2:
Вы могли бы использовать плагин treeview или плагин jsTree
Надеюсь, это поможет. Приветствия
Комментарии:
1. Но то, что я ищу, — это просто выпадающий список с несколькими вариантами ВЫБОРА. В идеале, я мог бы иметь дочерний выпадающий список и показывать соответствующий вложенный список, но хотел избежать этого, предоставляя возможность выбора в виде дерева!
2. Вы могли бы создавать / удалять некоторые скрытые элементы, когда пользователь нажимает на узел в этих плагинах. Я не знаю ни одного встроенного элемента управления, который был бы точно множественным выбором с требуемыми вами функциями.
Ответ №3:
Вы можете использовать <optgroup>
для каждой основной категории, дочерние элементы которой скрыты по умолчанию, и при нажатии на <optgroup>
ярлык он может просто отображать дочерние элементы <option>
.
Что-то вроде следующего:
В вашем CSS:
#categories optgroup option { display: none; }
В вашем HTML:
<select name="categories" id="categories">
<optgroup label=" Animals">
<option value="bird">Bird</option>
<option value="dog">Dog</option>
<option value="cat">Cat</option>
</optgroup>
</select>
В вашем JavaScript (с использованием jQuery):
$('#categories > optgroup').click(function(){
$(this).children().toggle();
});
Комментарии:
1. и когда я пытаюсь выбрать элементы вложенного списка, он просто переключается!
2. @HonorGod Ах, кажется, прошло слишком много времени с тех пор, как я использовал optgroups, они просто на самом деле недоступны через CSS, так что, вероятно, тогда это не сработает. Вам лучше использовать что-то вроде плагина treeview или упомянутого плагина jsTree и просто стилизовать это дерево, чтобы оно выглядело как множественный выбор, но просто привязать действия для изменения значений формы при нажатии.