【问题标题】:Change Class on first click of a button that opens a dropdown menu?第一次单击打开下拉菜单的按钮时更改类?
【发布时间】:2014-06-16 12:25:06
【问题描述】:

我希望仅在第一次单击按钮事件时更改按钮的图标类,这也将 ajax .put 一个字段到 db..

<div class="btn-group check-btns checkIt">
    <button type="button" class="btn btn-xs dropdown-toggle" data-toggle="dropdown">
    <span class="glyphicon glyphicon-unchecked"></span>
    </button>
  <ul class="dropdown-menu" role="menu">
    <li><a href="#">List Item 1</a></li>
    </ul>
</div>

首先测试了这个简单的 on.click (http://jsfiddle.net/57268/1/),但认为 Bootstrap 的内置下拉 .open 类切换可能会阻止这种情况..

$(document).ready(function () {

    $(function () {
    $('.checkIt').on('click', function () {

但是将其更改为收听正在显示的下拉菜单尚未起作用http://jsfiddle.net/57268/

$(document).ready(function () {

    $(function () {
    $('.btn-group.check-btns.checkIt').on('show.bs.dropdown', function () {
            console.log('checkIt clicked');
            var $this = $(this);
          var $that = $(this).children('.check-btns').children('.btn').find('.glyphicon')
          if ($that.hasClass('.glyphicon-unchecked')) {
            $that.removeClass('.glyphicon-unchecked').addClass('.glyphicon-check');
            console.log('now checked icon');
            $this.removeClass('.checkIt').addClass('.checkedIt');
            console.log('now checkedIt class');
            alert('checked and checkedIt .. now an ajax .put call');
          }
      })
    });

});

【问题讨论】:

    标签: javascript jquery html css twitter-bootstrap


    【解决方案1】:

    试试

    Fiddle Demo

    hasClassremoveClassaddClass 采用类名而不是选择器

    例如。 $el.addClass('class') 正确但 $el.addClass('.class') 不正确

    $(document).ready(function () {
        $('.checkIt').on('click', function () {
            console.log('checkIt clicked');
            var $this = $(this),
                $that = $(this).find('.glyphicon'); //changed to .find() only
            if ($that.hasClass('glyphicon-unchecked')) {
                $that.removeClass('glyphicon-unchecked').addClass('glyphicon-check');
                console.log('now checked icon');
                $this.removeClass('checkIt').addClass('checkedIt');
                console.log('now checkedIt class');
                alert('checked and checkedIt');
            }
        });
    });
    

    【讨论】:

    • 谢谢你..它在小提琴中运行良好..无论出于何种原因,它甚至还没有记录第一次 checkIt 在应用程序中点击..忘记提到这涉及模板车把,可能在这里侵入..所以我尝试将它绑定到文档(往往是模板的解决方案,但实际上我只是注意到另一个 addClass/removeClass 焦点事件不适用于模板..很好奇 -有什么建议吗?
    • 检查您的代码是否存在此问题,例如。 $el.addClass('class') 是正确的,但不是 $el.addClass('.class')
    • 首先,谢谢你.. 很棒的收获.. 事实证明它必须绑定到模板之外的元素以用于点击事件,例如。 $(".exterior-template-element").on("click", ".checkIt", function () {
    • @StackThis 很高兴它有帮助:)
    【解决方案2】:

    为了解释 Tushar 的解决方案,您的原始代码有两个问题:

      1234563这个类(你在它自己的子元素中寻找一个元素)。
    1. 在 hasClass 中,您正在寻找类“.glyphicon-unchecked” - 这是不正确的,类名实际上是“glyphicon-unchecked”,点仅在您需要选择器时使用。

    【讨论】:

    • 欣赏指针.. 不管出于何种原因,可能与模板有关(忘了提到这涉及车把),甚至第一个 console.log 还没有出现.. 任何建议跨度>
    • 原来它必须绑定到模板之外的元素以用于点击事件,例如。 $(".exterior-template-element").on("click", ".checkIt", function () {.. 再次感谢
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2016-08-19
    • 2015-03-09
    相关资源
    最近更新 更多