Javascript 多次发生的事件

Javascript 多次发生的事件,javascript,jquery,Javascript,Jquery,我在右键单击时实现了一个上下文菜单。在我的菜单上,我有一个按钮,按下它我控制台。logbutton被点击;信息 我面临的问题是,第一次单击时,我会收到一条消息。 第二次,一次单击,我就收到了两次消息。 诸如此类 下面是我的jquery代码: $(document).on("contextmenu", function(event) { if ($(event.target).hasClass("sim-row-edit")) { // sim-row-edit ended

我在右键单击时实现了一个上下文菜单。在我的菜单上,我有一个按钮,按下它我控制台。logbutton被点击;信息

我面临的问题是,第一次单击时,我会收到一条消息。 第二次,一次单击,我就收到了两次消息。 诸如此类

下面是我的jquery代码:

$(document).on("contextmenu", function(event) {
    if ($(event.target).hasClass("sim-row-edit")) {  // sim-row-edit ended
        console.log("right click identified");
        .....
        // no problem in here
        // multiple occurance problem coming here
        $(".custom-menu li").click(function() {
            switch ($(this).attr("data-action")) {
                case "firstcase":
                    var thisDiv = target_element.closest('div');
                    console.log("Button is clicked");
                break;
                case "nextcase":
                ...

        $(document).on("mouseup", function() {
            $(".selected").removeClass("selected");
            $(".custom-menu").hide(100);
        });
html代码:

<ul class='custom-menu'>
    <li data-action = "first">Clone</li>
    <li data-action = "second">Remove</li>
    <li data-action = "third">Edit</li>
</ul>
如何解决此问题?

尝试此事件。停止播放:

参考:


只需在再次添加处理程序之前取消绑定previos click处理程序。从jQuery 3.0开始,.unbind已被弃用。它已被.off取代。看起来您正在多次注册click事件处理程序。。你能分享一下你是如何注册iti的吗?我只是使用上面的代码不会解决问题,但应该会阻止你看到证据:在点击处理程序的末尾和任何非结束退出点添加return false。你显然有比提供的更多的代码,例如target_元素。某个地方正在注册其他单击事件。您可以添加html吗?您在哪里加载此代码?是否有可能加载多次?唯一一种情况是,当我多次加载该代码时,会出现错误。请检查此项。请尝试此$。自定义菜单li。关闭“单击”。单击时,函数{您需要从$document.oncontextmenu,functionevent中调用该代码{.unbind做到了这一点,在正常的html中,jquery问题并没有发生,而是在我使用相同的函数时发生的
$(".custom-menu li").click(function(e) {
  e.stopPropagation();
  switch ($(this).attr("data-action")) {
    case "firstcase":
  var thisDiv = target_element.closest('div');
  console.log("Button is clicked");
      break;

case "nextcase":
...
$(document).on("contextmenu", function(event) {
    if ($(event.target).hasClass("sim-row-edit")) {  // sim-row-edit ended
        console.log("right click identified");
        .....
        // no problem in here
        // unbind click handler to avoid multiple occurance problem 
        $(".custom-menu li").unbind('click');
        $(".custom-menu li").click(function() {
            switch ($(this).attr("data-action")) {
                case "firstcase":
                    var thisDiv = target_element.closest('div');
                    console.log("Button is clicked");
                break;
                case "nextcase":
                ...

        $(document).on("mouseup", function() {
            $(".selected").removeClass("selected");
            $(".custom-menu").hide(100);
        });