【问题标题】:Button's event doesn't work after click on button's title or button's icon单击按钮的标题或按钮的图标后,按钮的事件不起作用
【发布时间】:2018-07-11 05:56:38
【问题描述】:

我创建了一个带有标签和“向下插入符号”图标的下拉按钮。当下拉菜单打开时,“down-caret”图标应该向上旋转并且这是有效的。

但如果我点击按钮标题或“向下插入”图标,则此事件不起作用。

$(document).ready(function() {
  $('.dropdown').click(function(e) {
    $($(e.target).find('.down-caret').toggleClass('open-caret'));
    e.stopPropagation();
    $(document).click(function() {
      $('.dropdown-menu').removeClass('open');
      $('.down-caret').removeClass('open-caret');
    });
  });
});
a {
  text-decoration: none;
}

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown .drop {
  background-color: #3498db;
  color: #fff;
  padding: 1rem;
  border-radius: 6px;
  position: relative;
  display: inline-block;
}

.down-caret {
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 5px 5px 0 5px;
  border-color: #ffffff transparent transparent transparent;
  display: inline-block;
  margin-left: 6px;
  top: -3px;
  position: relative;
  transform: rotate(0deg);
  transition: all 0.25s ease-in;
}

.open-caret {
  transform: rotate(180deg);
  transition: all 0.25s ease-out;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li class="dropdown">
  <a class="drop" href="#">
    <span>Dropdown</span>
    <i class="down-caret"></i>
  </a>
</li>

我需要 span & i 标签存在于我的代码中。

这是我的完整代码jsFiddle

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    只需要定位锚元素并稍微改变你的JS。

    $(document).ready(function(){
      $('a.drop').click(function(e){
        e.preventDefault();
        $('.down-caret',this).toggleClass('open-caret');
        e.stopPropagation();
        $(document).click(function(){
          $('.dropdown-menu').removeClass('open');
          $('.down-caret').removeClass('open-caret');
        });
      });
    });
    a {
      text-decoration: none;
    }
    .dropdown {
      position: relative;
      display: inline-block;
    }
    .dropdown .drop {
      background-color: #3498db;
      color: #fff;
      padding: 1rem;
      border-radius: 6px;
      position: relative;
      display: inline-block;
    }
    .down-caret {
      width: 0;
      height: 0;
      border-style: solid;
      border-width: 5px 5px 0 5px;
      border-color: #ffffff transparent transparent transparent;
      display: inline-block;
      margin-left: 6px;
      top: -3px;
      position: relative;
      transform: rotate(0deg);
      transition: all 0.25s ease-in;
    }
    .open-caret {
      transform: rotate(180deg);
      transition: all 0.25s ease-out;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <li class="dropdown">
       <a class="drop" href="#">
          <span>Dropdown</span>
          <i class="down-caret"></i>
       </a>
    </li>

    【讨论】:

      【解决方案2】:

      原因是,您正在使用当前单击的元素$(e.target) 来查找内部具有类down-caret 的元素。

      如果您单击icontext,则内部没有具有该指定类的元素。

      您只需将$(e.target) 更改为$('.dropdown') 即可。

      $(document).ready(function(){
        $('.dropdown').click(function(e){
          $('.dropdown').find('.down-caret').toggleClass('open-caret');
       
        });
        
       
      });
      a {
        text-decoration: none;
      }
      .dropdown {
        position: relative;
        display: inline-block;
      }
      .dropdown .drop {
        background-color: #3498db;
        color: #fff;
        padding: 1rem;
        border-radius: 6px;
        position: relative;
        display: inline-block;
      }
      .down-caret {
        width: 0;
        height: 0;
        border-style: solid;
        border-width: 5px 5px 0 5px;
        border-color: #ffffff transparent transparent transparent;
        display: inline-block;
        margin-left: 6px;
        top: -3px;
        position: relative;
        transform: rotate(0deg);
        transition: all 0.25s ease-in;
      }
      .open-caret {
        transform: rotate(180deg);
        transition: all 0.25s ease-out;
      }
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
      
      <li class="dropdown">
         <a class="drop" href="#">
            <span>Dropdown</span>
            <i class="down-caret"></i>
         </a>
      </li>

      这里是fiddle

      【讨论】:

        【解决方案3】:

        你所要做的就是在你的 CSS 中添加这个类,代码就会按照你的意愿工作:

        .drop{
          position:relative;
          z-index: -1;
        }
        

        Here 是支持它的小提琴。

        希望这对您有所帮助。

        【讨论】:

        • 谢谢,但我一直希望在单击空白区域后,向下插入符号再次向下旋转。这里问题解决了jsfiddle.net/bahmanparsamanesh/ad4g12wj
        • 好的,但我找不到这个链接和我分享的链接有什么区别。
        • javascript - 第 3 行更改为:$($('.dropdown').find('.down-caret').toggleClass('open-caret'));
        【解决方案4】:

        与其使用 target 来查找“down-caret”图标,为什么不直接使用“down-icon”?

        $(e.target).find('.down-caret') 更改为$('.down-caret')

        【讨论】:

          【解决方案5】:

          我检查了你的小提琴代码,我刚刚删除了&lt;span&gt;,它工作正常。
          我还更新了你的小提琴JSFiddle

          【讨论】:

          • 我注意到需要 标签。
          猜你喜欢
          • 2019-05-15
          • 1970-01-01
          • 1970-01-01
          • 2018-09-18
          • 2014-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-07
          相关资源
          最近更新 更多