Як я можу візуалізувати поле вибору списку (спадне меню) за допомогою завантажувальної програми?


206

Чи є щось із вікна, що підтримує завантажувальний сервіс, щоб надати "звичайний" параметр вибору списку дефакто? Тобто, де випадаючий рядок - це список значень, а якщо вибрано, заповнювати вміст поля списку?

Щось подібне до цієї функціональності?

http://bootstrapformhelpers.com/select/

введіть тут опис зображення


20
Ви маєте на увазі - getbootstrap.com/css/#forms-controls (у розділі Вибір )?
cheersjosh

Ось як нормально вибирає роботу. У його списку опцій ви вибираєте один, який стає значенням. Як те, про що ви запитуєте, відрізняється?
Бурхан Халід

1
Тепер мені просто цікаво, як я можу замінити надуманий вигляд спадної іконки приємним виглядом каре. :)
genxgeek

1
Від getbootstrap.com: уникайте використання елементів <select> тут, оскільки вони не можуть бути повністю стилізовані у веб-переглядачах WebKit.
stuartdotnet

14
Мені незручно з ідеєю знехтувати рідним контролем заради візуальної рамки. Я щиро здивований, що завантажувач не має кращого рішення <select>. в той час як завантажувальний засіб використовується <ul>для спадів, що в кінцевому підсумку є помилковим використанням зазначеного тегу. Враховуючи всю помпу JQuery в завантажувальній машині, мені цікаво, чому вони не змінили карету для вибору. Це може здатися набагато витонченішим рішенням, ніж привласнення ul.
Джей Едвардс

Відповіді:


425

Bootstrap 3 використовує .form-controlклас для стильового формування компонентів.

<select class="form-control">
    <option value="one">One</option>
    <option value="two">Two</option>
    <option value="three">Three</option>
    <option value="four">Four</option>
    <option value="five">Five</option>
</select>

http://getbootstrap.com/css/#forms-controls


Я опинився тут, тому що мені потрібен був Bootstrap шукати Elm без використання bootstrap.js. Ключова візуальна відмінність цього рішення від "повного" завантажувального рішення (на яке натякає @JonathanEdwards) полягає в тому, що меню, яке з'являється, є ящиковим, менш гарним, як у alertвікні вашого браузера. Невелике питання дійсно. Проте, не натиснутий селектор схожий на Bootstrap.
Роберт

38

Інший варіант - змусити спадне меню Bootstrap вести себе як обране за допомогою jQuery ...

$(".dropdown-menu li a").click(function(){
  var selText = $(this).text();
  $(this).parents('.btn-group').find('.dropdown-toggle').html(selText+' <span class="caret"></span>');
});

http://www.bootply.com/b4NKREUPkN


4
Корисно, коли ви не хочете форми. Дякую.
Хорхе Лейтао

11

Приємна і проста відповідь Skelly тепер застаріла зі змінами синтаксису, що випадає у Bootstap. Замість цього використовуйте:

$(".dropdown-menu li a").click(function(){
  var selText = $(this).text();
  $(this).parents('.form-group').find('button[data-toggle="dropdown"]').html(selText+' <span class="caret"></span>');
});

11

Тест: http://jsfiddle.net/brynner/hkwhaqsj/6/

HTML

<div class="input-group-btn select" id="select1">
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><span class="selected">One</span> <span class="caret"></span></button>
    <ul class="dropdown-menu option" role="menu">
        <li id="1"><a href="#">One</a></li>
        <li id="2"><a href="#">Two</a></li>
    </ul>
</div>

jQuery

$('body').on('click','.option li',function(){
    var i = $(this).parents('.select').attr('id');
    var v = $(this).children().text();
    var o = $(this).attr('id');
    $('#'+i+' .selected').attr('id',o);
    $('#'+i+' .selected').text(v);
});

CSS

.select button {width:100%; text-align:left;}
.select .caret {position:absolute; right:10px; margin-top:10px;}
.select:last-child>.btn {border-top-left-radius:5px; border-bottom-left-radius:5px;}
.selected {padding-right:10px;}
.option {width:100%;}

Використовуйте "міні-ширину" у ".select button" класі відповідно до того, що вам потрібно.
Бріннер Феррейра

11

Іншим варіантом може бути використання bootstrap select . На власні слова:

Спеціальний вибір / мультиселекція для завантажувального пристрою за допомогою випадаючого кнопки, розроблений таким чином, що він обирається як звичайний вибір програми Bootstrap.


1
Робить саме те, що говорить, і доступний через cdn.
scharfmn

5

Ще один спосіб без використання .form-control:

  $(".dropdown-menu li a").click(function(){
        $(this).parents(".btn-group").find('.btn').html($(this).text() + ' <span class="caret"></span>');
        $(this).parents(".btn-group").find('.btn').val($(this).data('value'));
      });

$(".dropdown-menu li a").click(function(){
  $(this).parents(".btn-group").find('.btn').html($(this).text() + ' <span class="caret"></span>');
  $(this).parents(".btn-group").find('.btn').val($(this).data('value'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>


<div class="btn-group">
  <button  type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                  Test <span class="caret"> </span>
  </button>
  <ul class="dropdown-menu">
    <li><a href='#'>test 1</a></li>
    <li><a href='#'>test 2</a></li>
    <li><a href='#'>test 3</a></li>
  </ul>
</div>


3

Код Бена вимагає, щоб батьківський дів мав клас форм-групи (я використовував btn-group), це дещо інша версія, яка просто шукає найближчий div і може бути навіть трохи швидшою.

$(".dropdown-menu li a").click(function(){
    var selText = $(this).text();
    $(this).closest('div').find('button[data-toggle="dropdown"]').html(selText + ' <span class="caret"></span>');
});

1

Bootstrap3 .form-controlкласний, але для тих, хто любить або потребує випадаючого меню з кнопкою та ul опцією, ось оновлений код. Я відредагував код Стівом, щоб виправити перехід до хеш-ланки та закрити спадне меню після вибору.

Дякую Стіву, Бену та Скеллі!

$(".dropdown-menu li a").click(function () {
    var selText = $(this).text();
    $(this).closest('div').find('button[data-toggle="dropdown"]').html(selText + ' <span class="caret"></span>');
    $(this).closest('.dropdown').removeClass("open");
    return false;
});

1

В даний час я борюся зі спаданнями, і хочу поділитися своїм досвідом:

Існують конкретні ситуації, коли <select> їх неможливо використати, і їх слід «наслідувати» за допомогою спаду.

Наприклад, якщо ви хочете створити групи введення завантажувальної програми, наприклад, кнопки зі спадними списками (див. Http://getbootstrap.com/components/#input-groups-buttons-dropdowns ). На жаль <select>, не підтримується у групах введення, він не буде відображений належним чином.

Або хтось це вже вирішив? Мені було б дуже цікаво рішення.

А щоб зробити це ще складніше, ви не можете використовувати так просто, $(this).text()щоб зрозуміти, що обраний користувачем у спадному меню, якщо ви використовуєте гліпікони чи чудові шрифтові значки як вміст для випадаючого. Наприклад: <li id="someId"><a href="#0"><i class="fa fa-minus"></i></a></li> Тому що в цьому випадку немає тексту, і якщо ви додасте його, він також відображатиметься у спадному елементі, і це небажано.

Я знайшов два можливі рішення:

1) Використовуйте $(this).html()для отримання вмісту обраного <li>елемента, а потім для його вивчення, але ви отримаєте щось подібне, <a href="#0"><i class="fa fa-minus"></i></a>тому вам потрібно пограти з цим, щоб витягти те, що вам потрібно.

2) Використання $(this).text()і приховати текст елемента в прихованому прольоті: <li id="someId"><a href="#0"><i class="fa fa-minus"><span class="hidden">text</span></i></a></li>. Для мене це просте і елегантне рішення, ви можете помістити будь-який потрібний вам текст, текст буде приховано, і вам не потрібно робити ніяких перетворень $(this).html()результату, як у варіанті 1), щоб отримати те, що вам потрібно.

Я сподіваюся, що це зрозуміло і може комусь допомогти :-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.