Twitter Bootstrap açılır listeleri için olay işleyicileri?


87

Bir Twitter Önyükleme açılır düğmesi kullanmak istiyorum :

    <div class="btn-group">
      <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
      <ul class="dropdown-menu">
        <li><a href="#">Action</a></li>
        <li><a href="#">Another action</a></li>
        <li><a href="#">Something else here</a></li>
      </ul>
    </div><!-- /btn-group -->

Kullanıcı, düğmenin değerini "Başka bir işlem" olarak değiştirdiğinde, basitçe gezinmek yerine, #aslında eylemi özel bir şekilde ele almak isterim.

Ancak bunu yapmak için açılır eklentide herhangi bir olay işleyicisi göremiyorum .

Kullanıcı eylemlerini işlemek için Bootstrap açılır düğmelerini kullanmak gerçekten mümkün mü? Sadece gezinme amaçlı olup olmadıklarını merak etmeye başladım - örneğin bir eylemler listesi vermesi kafa karıştırıcı.


1
Bağlantı etiketi tıklandığında tetiklenen bir işlev çalışmaz mı?
Cameron Chapman

Bunlardan ilki herhangi bir düğme değil, bunlar çapa. Bootstrap.js dosyasını inceleyerek olay işleyicilerine göz atabilirsiniz. Ancak bildiğim kadarıyla tüm bu eylemler jQuery ile işleniyor, bu yüzden bu işlevselliği düzenlemek veya geçersiz kılmak çok önemli olmamalı.
mas-designs

Yanıtlar:


78

Twitter önyüklemesi temel bir işlevsellik sağlamak içindir ve yalnızca ekranda bir şey yapan temel javascript eklentilerini sağlar . Herhangi bir ek içerik veya işlev, kendiniz yapmanız gerekir.

<div class="btn-group">
  <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
  <ul class="dropdown-menu">
    <li><a href="#" id="action-1">Action</a></li>
    <li><a href="#" id="action-2">Another action</a></li>
    <li><a href="#" id="action-3">Something else here</a></li>
  </ul>
</div><!-- /btn-group -->

ve sonra jQuery ile

jQuery("#action-1").click(function(e){
//do something
e.preventDefault();
});

1
Ancak bunu denedim, hiçbir olay ateşlenmedi. Yine de bir düğmeyi tıklama olayını yakalayabilirim. Yolda başka ne olabilir?
Wrench

1
@RonnieKilsbo emin değilim. Bu çözüm belirtildiği gibi çalışıyor ve ben onu defalarca kullandım. Bağlantınızın kimliğini doğru ayarlamıyor olabilirsiniz veya öğeler mevcut olmadan önce bağlanıyor olabilirsiniz - bu durumda jQuery'yi kullanmanızı şiddetle tavsiye ederim .
Thomas Jones

1
Haklısın benim hatam Tıklanabilirleri jQuery ile bağladıktan sonra DOM'a öğeler ekledim ki bu kötü bir şey. :) Çalışıyor, onaylandı.
Wrench

18

Bunu dene:

$('div.btn-group ul.dropdown-menu li a').click(function (e) {
    var $div = $(this).parent().parent().parent(); 
    var $btn = $div.find('button');
    $btn.html($(this).text() + ' <span class="caret"></span>');
    $div.removeClass('open');
    e.preventDefault();
    return false;
});

14

Bootstrap 3'te 'dropdown.js' bize tetiklenen çeşitli olayları sağlar.

click.bs.dropdown
show.bs.dropdown
shown.bs.dropdown

vb


1
Bu doğru, ancak yine de olay işleyicileri eklemek için önyükleme çerçevesi içinde çalışmıyorsunuz. Bunu kendi başına yaparsın. Bootstrap her zaman özel işlevler sağlamakla değil, ekranda bir şeyler yapmakla ilgilidir. Geliştiricinin kendi açılır etkinliklerini bağlayabileceği varsayılmaktadır.
Thomas Jones

8

Çapalarınız için özel işlevleri nasıl uygulayabileceğinizin çalışan bir örneği.

http://jsfiddle.net/CH2NZ/43/

Bağlantınıza bir kimlik ekleyebilirsiniz:

<li><a id="alertMe" href="#">Action</a></li>

Ve sonra tıklama eylemini dinlemek ve işlevinizi ateşlemek için jQuery'nin tıklama olay dinleyicisini kullanın:

$('#alertMe').click(function(e) {
    alert('alerted');
    e.preventDefault();// prevent the default anchor functionality
});

Yukarıdaki örnek artık jsfiddle'da görünmüyor.
Ethereal

Geçerli bir bağlantıya sahip yeni bir örnek ekledim. Teşekkürler @ethereal.
Cameron Chapman

4

Ben buna bakıyordum. Açılır bağlantıları doldururken onlara bir sınıf ve veri öznitelikleri verdim, böylece bir işlem yapmanız gerektiğinde şunları yapabilirsiniz:

<li><a class="dropDownListItem" data-name="Fred Smith" href="#">Fred</a></li>

ve sonra jQuery'de şöyle bir şey yapıyor:

$('.dropDownListItem').click(function(e) {
    var name = e.currentTarget;
    console.log(name.getAttribute("data-name"));
});

Dolayısıyla, açılır listenizde dinamik olarak oluşturulmuş liste öğeleri varsa ve yalnızca öğenin metin değeri olmayan verileri kullanmanız gerekiyorsa, açılır liste öğesini oluştururken veri özniteliklerini kullanabilir ve ardından sınıfa sahip her öğeye her öğenin kimliğine atıfta bulunmak ve bir tıklama etkinliği oluşturmak yerine olay.


3

Burada Knockout JS entegrasyonu arayan herkes.

Aşağıdaki HTML (Standard Bootstrap açılır düğmesi) verildiğinde:

<div class="dropdown">
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
        Select an item               
        <span class="caret"></span>
    </button>
    <ul class="dropdown-menu" role="menu">
        <li>
            <a href="javascript:;" data-bind="click: clickTest">Click 1</a>
        </li>
        <li>
            <a href="javascript:;" data-bind="click: clickTest">Click 2</a>
        </li>
        <li>
            <a href="javascript:;" data-bind="click: clickTest">Click 3</a>
        </li>
    </ul>
</div>

Aşağıdaki JS'yi kullanın:

var viewModel = function(){
    var self = this;

    self.clickTest = function(){
        alert("I've been clicked!");
    }  
};

Nakavt gözlemlenebilir diziye dayalı açılır seçenekler oluşturmak isteyenler için, kod şunun gibi görünecektir:

var viewModel = function(){
    var self = this;

    self.dropdownOptions = ko.observableArray([
        { id: 1, label: "Click 1" },
        { id: 2, label: "Click 2" },
        { id: 3, label: "Click 3" }
    ])

    self.clickTest = function(item){
        alert("Item with id:" + item.id + " was clicked!");
    }  
};

<!-- REST OF DD CODE -->
<ul class="dropdown-menu" role="menu">
    <!-- ko foreach: { data: dropdownOptions, as: 'option' } -->
    <li>
        <a href="javascript:;" data-bind="click: $parent.clickTest, text: option.clickTest"></a>
    </li>
    <!-- /ko -->
</ul>
<!-- REST OF DD CODE -->

Gözlenebilir dizi öğesinin, görünüm modeli kodunda kullanılmak üzere tıklama işlevi işleyicisine örtük olarak iletildiğine dikkat edin.


3

Düğme grubunuzu hiç değiştirmenize gerek kalmadan aşağıdakileri yapabilirsiniz. Aşağıda, bu açılan varsayalım buttonbir sahiptir idait fldCategory.

<script type="text/javascript">

$(document).ready(function(){

  $('#fldCategory').parent().find('UL LI A').click(function (e) {
    var sVal = e.currentTarget.text;
    $('#fldCategory').html(sVal + ' <span class="caret"></span>');
    console.log(sVal);
  });

});

</script>

Belirlediğiniz Şimdi, eğer .btn-groupbu öğesinin kendi sahip olmak idarasında fldCategoryaslında daha verimli jQuery var ve biraz daha hızlı çalışır,:

<script type="text/javascript">

$(document).ready(function(){

  $('#fldCategory UL LI A').click(function (e) {
    var sVal = e.currentTarget.text;
    $('#fldCategory BUTTON').html(sVal + ' <span class="caret"></span>');
    console.log(sVal);
  });

});

</script>

Ha! Teşekkürler, bu harika! :) 2. örneğinizi kullandım.
drzounds

cevap bu olmalıydı!
Jake
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.