javascript - 无法让 jQuery .off() 删除事件处理程序

标签 javascript jquery html css

考虑到我要从“.reveal-menu”中删除事件绑定(bind),我似乎无法弄清楚为什么我的 .off('click') jQuery 方法不起作用。第一个动画效果很好,因为每个 div 以 78 的增量移动到各自的位置。但我似乎无法让它返回。

JQUERY

$(function(){

  var userMenuDivs = $('#user-menu div:gt(1)');
  userMenuDivs.hide();


  $('.reveal-menu').on('click',
    function(){
      $(this).addClass('down');
      iconSpacerCount = 78;
      userMenuDivs.show();
      $.each(userMenuDivs, function(index,value){
        $(this).animate({top:iconSpacerCount},200);
        iconSpacerCount += 78;});  
  });

  $('.reveal-menu').off('click',
    function(){
      $(this).removeClass('down');
      iconSpacerCount = 0;
      $.each(userMenuDivs, function(index,value){
        $(this).animate({top:iconSpacerCount});
      });
    });



});

HTML

  <div id="user-menu">
    <div class="reveal-menu">
    <i class="fa fa-plus fa-lg"></i>
    </div>

    <div class="post-option">
      <a href="#" class="fa fa-pencil fa-2x"></a>
    </div>

    <div class="search-option">
      <a href="#" class="fa fa-search fa-lg"></a>
    </div>

    <div class="chat-option">
      <a href="#" class="fa fa-comments fa-lg"></a>
    </div>

    <div class="profile-option">
      <a href="#" class="fa fa-user fa-lg"></a>
    </div>

    <div class="friends-option">
      <a href="#" class="fa fa-users fa-lg"></a>
    </div>

    <div class="organizations-option">
      <a href="#" class="fa fa-building-o fa-lg"></a>
    </div>

    <div class="public-figures-option">
      <a href="#" class="fa fa-bullhorn fa-lg"></a>
    </div>

    <div class="sign-out-option">
      <a href="#" class="fa fa-sign-out fa-lg"></a>
    </div>


  </div>

这是一个视频链接,向您展示我在做什么。 https://dl.dropboxusercontent.com/u/3270373/2016-06-01_21-57-20.mp4

最佳答案

.off 用于删除事件。不用于添加.on的相反事件。您可以像这样在两个函数之间切换 click 事件:

$(function() {
  var userMenuDivs = $('#user-menu div:gt(1)');
  userMenuDivs.hide();

  $('.reveal-menu').on('click', revealMenuOn);
});

function revealMenuOn() {
  $(this).addClass('down');
  $('#user-menu div:gt(1)').slideDown( "slow" );
  $('.reveal-menu').off('click').on('click', revealMenuOff);
}

function revealMenuOff() {
  $(this).removeClass('down');
  $('#user-menu div:gt(1)').slideUp( "slow" );
  $('.reveal-menu').off('click').on('click', revealMenuOn);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="user-menu">
  <div class="reveal-menu">
    <i class="fa fa-plus fa-lg">1</i>
  </div>

  <div class="post-option">
    <a href="#" class="fa fa-pencil fa-2x">2</a>
  </div>
  <div class="search-option">
    <a href="#" class="fa fa-search fa-lg">3</a>
  </div>
  <div class="chat-option">
    <a href="#" class="fa fa-comments fa-lg">4</a>
  </div>
  <div class="profile-option">
    <a href="#" class="fa fa-user fa-lg">5</a>
  </div>
  <div class="friends-option">
    <a href="#" class="fa fa-users fa-lg">6</a>
  </div>
  <div class="organizations-option">
    <a href="#" class="fa fa-building-o fa-lg">7</a>
  </div>
  <div class="public-figures-option">
    <a href="#" class="fa fa-bullhorn fa-lg">8</a>
  </div>
  <div class="sign-out-option">
    <a href="#" class="fa fa-sign-out fa-lg">9</a>
  </div>
</div>

关于javascript - 无法让 jQuery .off() 删除事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37581777/

相关文章:

javascript - 如何使 jQuery 下拉菜单直接向下而不是向右下拉?

html - svg 图像在表格中不缩放

html - Bootstrap 盒子不合适

jquery - 视差滚动 - 在绝对元素上滚动

javascript - jQuery 星级 slider 过滤器

java - HashTable 的良好 html 输出

javascript - 如何使用 jest 为使用 uuid 的函数编写测试用例?

javascript - Angular 在 Controller 中使用 Json 数据

javascript - moment 获取本地化的时间段 AM//PM

javascript - javascript 的调试工具,用于清理未使用的变量、语法错误......