对话框可同时触发多个事件

时间:2019-07-21 02:32:29

标签: jquery onclick

.on("click")产生了多个事件,为什么?有人可以向我解释吗?

$("#office_holder_delete").on("click", function (event) {
  event.preventDefault();
  var $message = "Oops! Something went wrong while processing your request!";
  dialog($message, function () {
    alert("Yes");
  }, function () {
    alert("No");
  });
});

function dialog(message, yesCallback, noCallback) {
  $("#alert_worn").html(message);
  $(".alert").css("background-color", "#F00");
  $(".alert-content").css("display", "flex");

  $("#yes_button").on("click", function () {
    $(".alert-content").css("display", "none");
    $(".alert").css({"height": "200px"});
    $(".alert p").css("text-align", "center");
    yesCallback();
  });

  $("#no_button").on("click", function () {
    $(".alert-content").css("display", "none");
    $(".alert").css({"height": "200px"});
    $(".alert p").css("text-align", "center");
    noCallback();
  });
}

我希望每一次“单击”都只有一个“是”或“否”,但是如果我下次单击它会产生2次“是”或“否”。如果我第三次单击,它将产生三倍的“是”或“否”。为什么?我不明白。我是jQuery的新手对于我来说,如果我一次调用函数,它必须产生一个响应。但实际上,这看起来很奇怪!

1 个答案:

答案 0 :(得分:0)

每次调用dialog函数时,它依次调用on,在按钮上设置另一个侦听器。因此,下次单击时,它将触发两次。

在功能之外全局设置它们,因此只能设置一次。