【问题标题】:How to give two functions to delegate function如何给两个函数委托函数
【发布时间】:2011-07-18 12:58:13
【问题描述】:

我正在使用 JQuery 并尝试将 delegate 用于 hover 操作。问题是悬停动作可以得到两个处理程序,句柄输入和句柄输出。如何使用委托来实现这一点?

我试过了,但没用:

 $(document).delegate('.box', 'hover',  
    function() { $(".a").addClass(".hover");}, 
    function() { $(".a").removeClass(".hover");});

【问题讨论】:

    标签: javascript jquery delegates jquery-events


    【解决方案1】:

    根据.hover 的文档:

    $(selector).mouseenter(handlerIn).mouseleave(handlerOut);
    

    因此,您应该能够为每个函数调用一次delegate:

    $(document)
      .delegate('.box', 'mouseenter', function() { alert(1); })
      .delegate('.box', 'mouseleave', function() { alert(2); });
    

    【讨论】:

      【解决方案2】:

      @Justin's solution 的替代方法是检查回调中的事件类型:

      function onMouseenter()
      {
          alert(1);
      }
      function onMouseleave()
      {
          alert(2);
      }
      
      $(document).delegate('.box', 'hover', function(event)
      {
          if (event.type === 'mouseenter') onMouseenter.apply(this, arguments);
          else onMouseleave.apply(this, arguments);
      });
      

      也就是说,如果您只是要委托给document,则无需使用.delegate()。改用.live(),这样更简洁:

      $('.box').live('hover', function (event)
      {
          // snip...
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-02
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多