Önyükleme Düğmesi Açılır Başlığında Seçili Öğeyi Görüntüleme


168

Benim uygulamada böyle bootstrap Dropdown bileşeni kullanıyorum:

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

Seçilen öğeyi btn etiketi olarak görüntülemek istiyorum. Başka bir deyişle, "Lütfen Listeden Seç" i seçilen liste öğesiyle değiştirin ("Öğe I", "Öğe II", "Öğe III").

Yanıtlar:


158

Sorununuzu anladığım kadarıyla, düğmenin metnini tıklayan bağlantılı metinle değiştirmek istediğinizdir, eğer öyleyse bunu deneyebilirsiniz: 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());

   });

});

Yorumunuza göre:

<li>Ajax çağrısı ile doldurulmuş listeler öğe olduğunda bu benim için çalışmaz .

.on()jQuery yöntemiyle olayı en yakın statik üst öğeye devretmeniz gerekir :

 $(function(){

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

});

Burada olay statik üst öğeye devredilir $(".dropdown-menu"), ancak $(document)her zaman kullanılabilir olduğu için olayı da devredebilirsiniz .


1
Merhaba Jai ​​ur örnek bağlantı denedim ama orada çalışmıyor, yanı sıra daha sonra veritabanına göndermek için seçilen değeri kapmak gerekir
— Suffii

@Behseini "Veritabanına göndermek için seçilen değeri de yakala" seçeneğini açıklayabilir misiniz?
— Jai

db göndermek istediğiniz geçerli tıklama öğesi değeri varsa cevap güncelledi.
— Jai

2
Merhaba Behseini, bu "$ (function () {});" "$ (belge) .ready (function () {});" ile eşdeğerdir. daha fazla bilgiyi burada bulabilirsiniz: api.jquery.com/ready
— Jai

1
BU çözümün biraz hokey gibi görünmüyor mu?
— Christine

146

Bootstrap 3.3.4 için güncellendi:

Bu, her öğe için farklı ekran metnine ve veri değerine sahip olmanızı sağlayacaktır. Ayrıca seçim sırasında düzeltme işareti devam edecektir.

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 Fiddle Örneği


Harika çalışıyor ve "$ (this) .parents (". Btn-group "). Find ('. Selection'). Text ($ (this) .text ()). end () .children ('.dropdown-toggle') .dropdown ('toggle'); "
— Senthil

4
Bootstrap 3.3.4 güncellemesi: ebeveynler (". İnput-group-btn") ebeveynlerle değiştirilmelidir (".
— Dropdown

7
@Cincplug tarafından önerilen değişiklik eklendikten sonra bu kabul edilen cevap olmalıdır. Ayrıca, düğmenin metninde aşağı işaretini korumak istiyorsanız, .text yerine .html kullanmanız ve süreyi birleştirmeniz gerekir $(this).text().
— MattD

@MattD, keşke kabul edilen cevaba yorum yapmadan önce yorumunu görseydim keşke tamamsın.
— Paul

3
Ben $(this).parents(".dropdown").find('.btn')jquery DOM iki kez çapraz yerine bir değişken depolamak öneririz .
— Adam

29

Bootstrap 3 ile çalışan oldukça iyi bir sunumla birden fazla düğme açılır listesinin olması durumunda Jai'nin yanıtını biraz geliştirebildim:

Düğme Kodu

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

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

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

});

Ayrıca "seçim" sınıfına 5px margin-right ekledim.


11

Bu tek jQuery işlevi ihtiyacınız olan her şeyi yapacaktır.

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

Teşekkürler ! bu cevap diğer tüm çözümleri okurken 10 dakikamı boşa harcadıktan sonra kurtar.
— Aizuddin Badry

7

İşte bunun zamanımı kurtarabileceğini umduğum versiyonum :)

resim açıklamasını buraya girin jQuery BÖLÜM:

$(".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 PARÇASI:

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

Açılır menüdeki metni kullanıcının yeni seçtiği şekilde nasıl değiştirirsiniz? Seçenek 1'i seçtiklerini ve ardından tıkladıklarını varsayalım. Birinci seçenek metni bu noktada açılır menüde olmalıdır, bunu nasıl yapıyorsunuz?
— user1835351

Bir kullanıcı "var selText = $ (this) .children (" h4 "). Html ()" seçeneğini belirlediğinde metni değiştirin.
— Oskar

7

Bu, aynı sayfada birden fazla açılır menüde çalışır. Ayrıca, seçilen öğeye şapka ekledim:

    $(".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());
    });

Katı modda "Yakalanmayan ReferenceError: $ xx tanımlanmadı"
— Ivan Topić

Ivan katı modda çalışan bir şey buldun mu?
— sıfırlar ve olanlar

Bu, aynı sayfada birden çok önyükleme açılır menüsü için harika çalışıyor. Teşekkür ederim!
— Mitch

5

openiçinde add sınıf kullanmanız gerekir<div class="btn-group open">

ve liek olarakclass="active"


4

@Kyle tarafından verilen yanıtlara göre $ .text () tam dizeyi döndürdüğü için daha fazla değiştirildi, böylece düzeltme etiketi bir işaretleme yerine tam olarak yazdırılır, ancak birinin düzeltme işareti bozulmadan saklanması istenirse.

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

4

Birden fazla açılır menü ile çalışmanın başka bir basit yolu (Bootstrap 4)

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

3

Sayfadaki birden fazla açılır menü için komut dosyasını düzelttim

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

1

Uzun bir mesele gibi görünüyor. Tek istediğimiz girdi grubuna bir select etiketi uygulamak. Ancak bootstrap bunu yapmaz: https://github.com/twbs/bootstrap/issues/10486

hile sadece üst div'e "btn-group" sınıfı ekliyor

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

Öğeyi tıkladıktan sonra, data-selected-item = 'true' gibi bir veri özelliği ekleyin ve tekrar alın.

Tıkladığınız li öğesi için data-selected-item = 'true' eklemeyi deneyin , ardından

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

Bu özelliği eklemeden önce, listedeki mevcut veri seçilen öğeyi kaldırmanız yeterlidir. Umarım bu sana yardımcı olur

JQuery'de veri özniteliği kullanımı hakkında bilgi için jQuery verilerine bakın


Merhaba Murali, var test = $('ul.dropdown-menu li').data('selected-item').find('a').text(); $("#nbtn").html(test); Yorumunuz için teşekkürler, bunu denedim ama hala bir şey almıyorum lütfen yanlış yaptığımı bana bildirin?
— Suffii

Lütfen güncellenmiş cevaba bakınız. Kodu $ olarak değiştirdim ('ul.dropdown-menu li [veri-seçilen öğe] a'). Text (); Bunu deneyin
— Murali Murugesan

0

Görüntülenen javascripts "document.ready" kodu içine koymak zorunda kaldı. Aksi takdirde çalışmadılar. Muhtemelen birçokları için açık, ama benim için değil. Test ediyorsanız, bu seçeneğe bakın.

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

0

Örneğin:

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>

Yalnızca düğmenin metnini değiştirmek için yeni öğe BtnCaption kullanıyorum .

$(document).ready(function () {}Aşağıdaki metne yapıştırın

JavaScript:

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

:not(.disabled) devre dışı bırakılmış menü öğelerinin kullanılmasına izin verme

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.