jquery .on("点击")在.off之后不工作("点击")

时间:2017-08-08 19:50:44

标签: jquery

我可以使用一些帮助来调试这个:

var factBody = jQuery(".fact__body");

jQuery(".fact").on("click", function() {
    jQuery(".fact").not(this).addClass("fact-inactive");
    jQuery(this).addClass("fact-active");
    jQuery(".fact").off("click");

    var indexOfClicked = jQuery(this).index();
    var descriptionOfIndex = 
    jQuery(".fact__description").eq(indexOfClicked - 1);

 jQuery(factBody).show().addClass("active").append(descriptionOfIndex);
});

jQuery(".fact-close").on("click", function() {
    jQuery(factBody).hide().removeClass("active");
    jQuery(".fact").removeClass("fact-inactive fact-active");
    jQuery(".fact").on("click");
});

https://jsfiddle.net/left23/yyoxpk9j/

单击一个项目后,我使用.off方法删除单击处理程序。这有效。因此,当显示文本面板时,项目不再可单击。这就是我一次阻止多个面板打开的方式。

关闭文字面板后,点击“关闭”按钮即可。按钮,我尝试再次添加点击处理程序,但这失败了。我无法清楚地看到原因。

提前致谢。如果需要进一步澄清,请告诉我。

1 个答案:

答案 0 :(得分:2)

问题在于.on('click')并没有记住您以前的活动。你需要把它变成一个你可以记忆的功能,如此

var factBody = jQuery(".fact__body");
var handleClickEvent = function() {
  jQuery(".fact").not(this).addClass("fact-inactive");
  jQuery(this).addClass("fact-active");
  jQuery(".fact").off("click", handleClickEvent);

  var indexOfClicked = jQuery(this).index();
  var descriptionOfIndex = 
      jQuery(".fact__description").eq(indexOfClicked - 1);

  jQuery(factBody).show().addClass("active").append(descriptionOfIndex);
}

jQuery(".fact").on("click", handleClickEvent);

jQuery(".fact-close").on("click", function() {
  jQuery(factBody).hide().removeClass("active");
  jQuery(".fact").removeClass("fact-inactive fact-active");
  jQuery(".fact").on("click", handleClickEvent);
});