부트 스트랩 버튼 드롭 다운 제목에 선택한 항목을 표시하는 방법


168

내 응용 프로그램에서 다음과 같이 부트 스트랩 드롭 다운 구성 요소를 사용하고 있습니다.

<div class="btn-group">
    <button class="btn">Please Select From List</button>
    <button class="btn dropdown-toggle" data-toggle="dropdown">
        <span class="caret"></span>
    </button>
    <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
       <li><a tabindex="-1" href="#">Item I</a></li>
       <li><a tabindex="-1" href="#">Item II</a></li>
       <li><a tabindex="-1" href="#">Item III</a></li>
       <li class="divider"></li>
       <li><a tabindex="-1" href="#">Other</a></li>
    </ul>
</div>

선택한 항목을 btn 레이블로 표시하고 싶습니다. 즉, "목록에서 선택하십시오"를 선택한 목록 항목 ( "항목 I", "항목 II", "항목 III")으로 바꾸십시오.

답변:


158

내가 아는 한, 링크 된 텍스트를 클릭하여 버튼의 텍스트를 변경하려는 경우이를 시도 할 수 있습니다 .http : //jsbin.com/owuyix/4/edit

 $(function(){

    $(".dropdown-menu li a").click(function(){

      $(".btn:first-child").text($(this).text());
      $(".btn:first-child").val($(this).text());

   });

});

귀하의 의견에 따라 :

<li>아약스 호출을 통해 채워진 목록 항목이있을 때 이것은 작동하지 않습니다 .

따라서 .on()jQuery 메소드 를 사용하여 가장 가까운 정적 상위에 이벤트를 위임해야합니다 .

 $(function(){

    $(".dropdown-menu").on('click', 'li a', function(){
      $(".btn:first-child").text($(this).text());
      $(".btn:first-child").val($(this).text());
   });

});

여기서 이벤트는 정적 parent $(".dropdown-menu")에 위임되지만 $(document)항상 사용 가능하므로 이벤트도 위임 할 수 있습니다.


1
안녕 Jai 나는 당신의 샘플 링크를 시도했지만 거기에서 작동하지 않습니다, 나중에 데이터베이스에 게시하기 위해 선택한 값을
가져와야

@Behseini 어떤 값을 "데이터베이스에 게시 할뿐만 아니라 선택한 값을 가져 와서"명확히 할 수 있습니까?
Jai

현재 클릭 한 항목 값을 DB에 게시하려는 경우 답변을 업데이트했습니다.
Jai

2
안녕 Behseini,이 "$ (function () {});" "$ (document) .ready (function () {});"와 동일합니다. 자세한 내용은 여기를 참조하십시오 : api.jquery.com/ready
Jai

1
이것이 해결책이라는 것이 조금 어려워 보이지 않습니까?
Christine

146

부트 스트랩 3.3.4 용으로 업데이트 :

이를 통해 각 요소마다 다른 표시 텍스트와 데이터 값을 가질 수 있습니다. 또한 선택시 캐럿을 유지합니다.

JS :

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

HTML :

<div class="dropdown">
  <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
    Dropdown
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
    <li><a href="#" data-value="action">Action</a></li>
    <li><a href="#" data-value="another action">Another action</a></li>
    <li><a href="#" data-value="something else here">Something else here</a></li>
    <li><a href="#" data-value="separated link">Separated link</a></li>
  </ul>
</div>

JS 피들 예제


잘 작동하고 선택 "$ (this) .parents (". btn-group "). find ( '. selection'). text ($ (this) 후 드롭 다운 항목을 숨기려면 아래에 추가했습니다. .text ()). end () .children ( '.dropdown-toggle') .dropdown ( 'toggle'); "
Senthil

4
Bootstrap 3.3.4 업데이트 : 부모 ( "
.input

7
@cincplug에서 제안한 변경 사항을 추가 한 후에는 이것이 정답입니다. 또한 버튼 텍스트에 다운 캐럿을 유지하려면 .text 대신 .html을 사용하고 범위를에 연결해야합니다 $(this).text().
MattD

@MattD, 내가 받아 들인 답변에 댓글을 달기 전에 귀하의 의견을 보았기를 바랍니다.
Paul

3
$(this).parents(".dropdown").find('.btn')jquery가 DOM을 두 번 통과하는 대신 변수에 저장하는 것이 좋습니다 .
Adam

29

부트 스트랩 3에서 작동하는 꽤 좋은 프리젠 테이션으로 하나 이상의 버튼 드롭 다운이있는 경우 Jai의 대답을 약간 향상시킬 수있었습니다.

버튼 코드

<div class="btn-group">
  <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
    Option: <span class="selection">Option 1</span><span class="caret"></span>
  </button>
  <ul class="dropdown-menu" role="menu">
    <li><a href="#">Option 1</a></li>
    <li><a href="#">Option 2</a></li>
    <li><a href="#">Option 3</a></li>
  </ul>
</div>

JQuery 스 니펫

$(".dropdown-menu li a").click(function(){

  $(this).parents(".btn-group").find('.selection').text($(this).text());
  $(this).parents(".btn-group").find('.selection').val($(this).text());

});

또한 "선택"클래스에 5px 마진 오른쪽을 추가했습니다.


11

이 단일 jQuery 함수는 필요한 모든 것을 수행합니다.

$( document ).ready(function() {
    $('.dropdown').each(function (key, dropdown) {
        var $dropdown = $(dropdown);
        $dropdown.find('.dropdown-menu a').on('click', function () {
            $dropdown.find('button').text($(this).text()).append(' <span class="caret"></span>');
        });
    });
});

감사 ! 이 답변은 10 분 동안 다른 모든 솔루션을 읽은 후 나를 구해줍니다.
Aizuddin Badry

7

여기에 내 버전이 있습니다. 시간을 절약 할 수 있기를 바랍니다. :)

여기에 이미지 설명을 입력하십시오 jQuery 파트 :

$(".dropdown-menu").on('click', 'li a', function(){
  var selText = $(this).children("h4").html();


 $(this).parent('li').siblings().removeClass('active');
    $('#vl').val($(this).attr('data-value'));
  $(this).parents('.btn-group').find('.selection').html(selText);
  $(this).parents('li').addClass("active");
});

HTML 부분 :

<div class="container">
  <div class="btn-group">
    <a class="btn btn-default dropdown-toggle btn-blog " data-toggle="dropdown" href="#" id="dropdownMenu1" style="width:200px;"><span class="selection pull-left">Select an option </span> 
      <span class="pull-right glyphiconglyphicon-chevron-down caret" style="float:right;margin-top:10px;"></span></a>

     <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
       <li><a href="#" class="" data-value=1><p> HER Can you write extra text or <b>HTLM</b></p> <h4> <span class="glyphicon glyphicon-plane"></span>  <span> Your Option 1</span> </h4></a>  </li>
       <li><a href="#" class="" data-value=2><p> HER Can you write extra text or <i>HTLM</i> or some long long long long long long long long long long text </p><h4> <span class="glyphicon glyphicon-briefcase"></span> <span>Your Option 2</span>  </h4></a>
      </li>
      <li class="divider"></li>
   <li><a href="#" class="" data-value=3><p> HER Can you write extra text or <b>HTLM</b> or some </p><h4> <span class="glyphicon glyphicon-heart text-danger"></span> <span>Your Option 3</span>  </h4></a>
      </li>
    </ul>
  </div>
  <input type="text" id="vl" />
</div>  

드롭 다운의 텍스트를 사용자가 방금 선택한 내용으로 어떻게 변경합니까? 그들이 옵션 1을 선택한 다음 클릭을 해제했다고 가정하십시오. 옵션 1의 텍스트는이 시점의 드롭 다운에 있어야합니다. 어떻게합니까?
user1835351

사용자가 "var selText = $ (this) .children ("h4 "). html ()"옵션을 선택하면 텍스트가 변경됩니다.
Oskar

7

이것은 동일한 페이지에서 둘 이상의 드롭 다운에서 작동합니다. 또한 선택한 항목에 캐럿을 추가했습니다.

    $(".dropdown-menu").on('click', 'li a', function(){
        $(this).parent().parent().siblings(".btn:first-child").html($(this).text()+' <span class="caret"></span>');
        $(this).parent().parent().siblings(".btn:first-child").val($(this).text());
    });

내가 얻을 : 엄격 모드에서 "catch되지 않은 오류 ReferenceError은 $ xx에 정의되지 않은"
이반 주제를

Ivan 엄격 모드에서 작동하는 것을 찾았습니까?
0과 1

이것은 같은 페이지에서 여러 부트 스트랩 드롭 다운에 효과적입니다. 감사합니다!
Mitch

5

당신은 클래스 open를 추가해야합니다<div class="btn-group open">

그리고 li추가class="active"


4

@Kyle의 대답을 기반으로 $ .text ()가 정확한 문자열을 반환하므로 추가로 수정되므로 캐럿 태그를 그대로 유지하려는 경우를 대비하여 캐럿 태그가 문자 그대로 표시됩니다.

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

3

페이지의 여러 드롭 다운에 대한 스크립트를 수정했습니다

$(function(){
    $(".dropdown-menu li a").click(function(){
        var item = $(this);
        var id = item.parent().parent().attr("aria-labelledby");

        $("#"+id+":first-child").text($(this).text());
        $("#"+id+":first-child").val($(this).text());
   });
});

3

여러 드롭 다운에서 작동하는 또 다른 간단한 방법 (Bootstrap 4)

    $('.dropdown-item').on('click',  function(){
        var btnObj = $(this).parent().siblings('button');
        $(btnObj).text($(this).text());
        $(btnObj).val($(this).text());
    });

1

긴 문제인 것 같습니다. 입력 그룹에 select 태그를 구현하기 만하면됩니다. 그러나 부트 스트랩은 그것을하지 않을 것입니다 : https://github.com/twbs/bootstrap/issues/10486

트릭은 단지 "btn-group"클래스를 부모 div에 추가하는 것입니다.

html :

<div class="input-group">
  <div class="input-group-btn btn-group">
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
      Product Name <span class="caret"></span>
    </button>
    <ul class="dropdown-menu" role="menu">
        <li><a href="#">A</a></li>
        <li><a href="#">B</a></li>
    </ul>
  </div>
  <input type="text" class="form-control">
  <span class="input-group-btn">
    <button class="btn btn-primary" type="button">Search</button>
  </span>
</div>

js :

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

0

항목을 클릭하면 data-selected-item = 'true' 와 같은 일부 데이터 속성을 추가 하고 다시 가져옵니다.

시도 = '진정한'데이터 선택 항목을 추가 하기위한 리튬 요소 후, 당신은 클릭하는 것이

   $('ul.dropdown-menu li[data-selected-item] a').text();

이 속성을 추가하기 전에 목록에서 기존 데이터 선택 항목을 제거하기 만하면됩니다. 희망이 당신을 도울 것입니다

jQuery의 데이터 속성 사용에 대한 정보는 jQuery 데이터를 참조하십시오.


안녕하세요 Murali, var test = $('ul.dropdown-menu li').data('selected-item').find('a').text(); $("#nbtn").html(test); 귀하의 의견에 감사드립니다, 나는 이것을 시도했지만 여전히 아무것도 얻지 못 합니까 내가 뭘 잘못하고 있는지 알려주세요?
Suffii

업데이트 된 답변을 참조하십시오. 코드를 $ ( 'ul.dropdown-menu li [data-selected-item] a'). text (); 이것을 시도
Murali Murugesan

0

위에 표시된 자바 스크립트를 "document.ready"코드 안에 넣어야했습니다. 그렇지 않으면 그들은 작동하지 않았다. 아마 많은 사람들에게는 분명하지만 나에게는 그렇지 않을 것입니다. 따라서 테스트하는 경우 해당 옵션을 살펴보십시오.

<script type="text/javascript">
$(document).ready(function(){
//rest of the javascript code here
});
</script>

0

예를 들면 다음과 같습니다.

HTML :

<div class="dropdown">
  <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
     <BtnCaption>Select item</BtnCaption>
     <span class="caret"></span>   
  </button>
  <ul class="dropdown-menu">
     <li><a href="#">Option 1</a></li>
     <li><a href="#">Option 2</a></li>
     <li class="disabled"><a href="#">Option 3</a></li>   
  </ul> 
</div>

버튼의 텍스트 변경하기 위해 새로운 요소 BtnCaption을 사용 합니다.

$(document).ready(function () {}다음 텍스트에 붙여 넣기

자바 스크립트 :

    $(".dropdown-menu li:not(.disabled) a").click(function () {
        $(this).closest(".dropdown").find(".btn BtnCaption").text($(this).text()));
    });

:not(.disabled) 비활성화 된 메뉴 항목을 사용할 수 없습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.