88

我想使用Twitter Bootstrap 下拉按钮

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

当用户将按钮的值更改为“另一个动作”时,而不是简单地导航到#,我实际上想以自定义方式处理该动作。

但是我在下拉插件中看不到任何用于执行此操作的事件处理程序。

实际上是否可以使用 Bootstrap 下拉按钮来处理用户操作?我开始怀疑它们是否仅用于导航 - 该示例提供了一个操作列表,这令人困惑。

4

8 回答 8

79

Twitter bootstrap 旨在提供基线功能,并且仅提供在 screen 上执行某些操作的基本 javascript 插件。任何其他内容或功能,您必须自己做。

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

然后用 jQuery

jQuery("#action-1").click(function(e){
//do something
e.preventDefault();
});
于 2012-08-16T14:24:42.213 回答
18

试试这个:

$('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;
});
于 2013-03-16T17:55:37.910 回答
14

在 Bootstrap 3 中,“dropdown.js”为我们提供了触发的各种事件。

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

ETC

于 2015-06-25T16:53:16.130 回答
8

这是一个工作示例,说明如何为锚点实现自定义功能。

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

您可以将 id 附加到您的锚点:

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

然后使用 jQuery 的点击事件监听器来监听点击动作并触发你的函数:

$('#alertMe').click(function(e) {
    alert('alerted');
    e.preventDefault();// prevent the default anchor functionality
});
于 2012-08-16T14:27:03.837 回答
4

我一直在看这个。在填充下拉锚点时,我给了它们一个类和数据属性,所以当需要做一个动作时,你可以做:

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

然后在 jQuery 中做类似的事情:

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

因此,如果您在下拉列表中动态生成了列表项,并且需要使用的数据不仅仅是项目的文本值,您可以在创建下拉列表项时使用数据属性,然后只为每个项目提供类事件,而不是引用每个项目的 id 并生成点击事件。

于 2016-09-20T12:42:13.787 回答
3

任何在这里寻找 Knockout JS 集成的人。

给定以下 HTML(标准引导下拉按钮):

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

使用以下 JS:

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

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

对于那些希望基于淘汰赛可观察数组生成下拉选项的人,代码看起来像:

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

请注意,可观察数组项被隐式传递到 click 函数处理程序以在视图模型代码中使用。

于 2015-06-03T13:44:49.443 回答
3

无需更改您的按钮组,您可以执行以下操作。下面,我假设您的下拉列表button中有一个idof 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>

现在,如果您将该项.btn-group本身的 of 设置为具有idof fldCategory,这实际上是更高效的 jQuery 并且运行得更快一些:

<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>
于 2017-03-31T03:58:36.060 回答
0

在这里,选项具有值、标签和 css 类,它们会在选择时反映在父元素上。

$(document).on('click','.update_app_status', function (e) {
            let $div = $(this).parent().parent(); 
            let $btn = $div.find('.vBtnMain');
            let $btn2 = $div.find('.vBtnArrow');
            let cssClass = $(this).data('status_class');
            let status_value = $(this).data('status_value');
            let status_label = $(this).data('status_label');
            $btn.html(status_label);
            $btn.removeClass();
            $btn2.removeClass();
            $btn.addClass('btn btn-sm vBtnMain '+cssClass);
            $btn2.addClass('btn btn-sm vBtnArrow dropdown-toggle dropdown-toggle-split '+cssClass);
            $div.removeClass('show');
            $div.find('.dropdown-menu').removeClass('show');
            e.preventDefault();
            return false;
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" rel="stylesheet"/>


  

   <div class="btn-group">
   <button type="button" class="btn btn-sm vBtnMain btn-warning">Awaiting Review</button>
   <button type="button" class="btn btn-sm vBtnArrow btn-warning dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
       <span class="sr-only">Toggle Dropdown</span>
   </button>
   <div class="dropdown-menu dropdown-menu-right">
     <a class="dropdown-item update_app_status" data-status_class="btn-warning" data-status_value="1" data-status_label="Awaiting Review" href="#">Awaiting Review</a>
     <a class="dropdown-item update_app_status" data-status_class="btn-info" data-status_value="2" data-status_label="Reviewed" href="#">Reviewed</a>
     <a class="dropdown-item update_app_status" data-status_class="btn-dark" data-status_value="3" data-status_label="Contacting" href="#">Contacting</a>
     <a class="dropdown-item update_app_status" data-status_class="btn-success" data-status_value="4" data-status_label="Hired" href="#">Hired</a>
     <a class="dropdown-item update_app_status" data-status_class="btn-danger" data-status_value="5" data-status_label="Rejected" href="#">Rejected</a>
   </div>
   </div>

于 2021-02-18T20:27:36.553 回答