2

在codeschool上我的,以下不起作用

$(document).ready(function() { 
  $("#tour").on("click", "button", function() { 
    $(".photos").slideToggle();
  });
    $(".photos").on("mouseenter", "li", function() {
    $(this).find("span").slideToggle();

    $(".photos").on("mouseleave", "li", function() {
    $(this).find("span").slideToggle();
    });
  });
});

而以下显然是正确的。

$(document).ready(function() { 
  $("#tour").on("click", "button", function() { 
    $(".photos").slideToggle();
  });
  $(".photos").on("mouseenter", "li", function() {
    $(this).find("span").slideToggle();

  })          .on("mouseleave", "li", function() {
    $(this).find("span").slideToggle();
  });
});

在我看来,他们只是通过省略第二个来走捷径$(".photos")。我可以看到像这样调用两次可能效率低下,但这实际上也是一个错误?

4

1 回答 1

3

不,这不是错误,问题是您要mouseleave在每个事件上附加一个新的事件处理程序mouseenter

$(".photos").on("mouseenter", "li", function() {
    $(this).find("span").slideToggle();

    // Here
    $(".photos").on("mouseleave", "li", function() {
        $(this).find("span").slideToggle();
    });
});

为了缩小代码,您可以将对象传递给on方法:

$(".photos").on({
   mouseenter: function() {
      $(this).find("span").slideToggle();
   },
   mouseleave: function() {
      $(this).find("span").slideToggle();
   }
}, 'li');
于 2013-09-21T22:27:59.087 回答