如何在 .on 方法中提供多个事件和处理程序?

How to give multiple events and handlers in .on method?

我正在尝试通过在 on 方法中使用多个处理程序来移动 submenu。 我想要的是,如果我将鼠标移到 li 元素之一,事件字符串 mouseenter 检测到,然后执行 function panelON 并且在 mouseleave 和 [=19 之间采用相同的方式=].

所以我用各种方法编写了代码,但所有方法都不起作用,而且每个方法都有其特定的错误。

  target = $('#home-menu-nav ul li');
  target.on('mouseenter mouseleave', {
    convert: $('#submenu-content'),
    panelON(event) || panelOFF(event)
  })

  function panelON(event) {
    if (event.type == 'mouseenter') {
      console.log('fx panelON detected')
    } else {
      return
    }
  }

此打印错误 Unexpected token ||。似乎 || 标记不能与处理程序的 insdie 一起使用。

我尝试的下一个只是分组事件和处理程序,就像本文中的一样。 link

  target.on( {mouseenter: panelON(event)}, {mouseleave: panelOFF(event)} )

  function panelON(event) {
    console.log('fx panelON detected')
  }

  function panelOFF(event) {
    console.log('fx panelOFF detected')
  }

无论我有没有徘徊target,这都是立即开始的。

  target = $('#home-menu-nav ul li');
  target.on( {mouseenter: function() {
    console.log('fx panelON detected')
  }}, {mouseleave: function() {
    console.log('fx panelOFF detected')
  }} )

最后一个。这个只打印 mouseentermouseleave 不起作用。 .on 方法中是否有任何方法可以在事件和处理程序之间进行匹配?

当您使用绑定的 on(object) 版本时,您必须给它一个单独的对象,包含 key/value 对 event:handler,如下所示。

$('button').on({
  mouseenter: function(){ console.log('Im In!'); }
  , mouseleave: function(){ console.log('Im Out!'); }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Hover Me</button>

@kekboi,欢迎来到 Whosebug!

你的第二次尝试,

target.on( {mouseenter: panelON(event)}, {mouseleave: panelOFF(event)} ) 

非常接近。鉴于函数上的 () 立即调用给定函数,这不是您想要的,并且正如@Taplar 所建议的那样 - on 接受 an 对象 on(object) -我建议你使用以下版本。

target.on({ mouseenter: panelON, mouseleave: panelOFF });

$(function() {
    var target = $('button.mybutton');
    
    target.on({ mouseenter: panelON, mouseleave: panelOFF });

    function panelON(event) {
        console.log('fx panelON detected')
    }

    function panelOFF(event) {
        console.log('fx panelOFF detected')
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="mybutton">Hover Me Now</button>