代码之家  ›  专栏  ›  技术社区  ›  user2828442

多次发生的事件

  •  0
  • user2828442  · 技术社区  · 6 年前

    我已经实现了右击上下文菜单。在我的菜单上,我有一个按钮,按下它我 console.log("button is clicked"); 信息。

    我面临的问题是,第一次点击,我得到的信息 1次 . 第二次,一次点击,我就收到了一条信息 . 诸如此类。。。

    下面是我的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);
            });
    

    <ul class='custom-menu'>
        <li data-action = "first">Clone</li>
        <li data-action = "second">Remove</li>
        <li data-action = "third">Edit</li>
    </ul>
    

    我该如何解决这个问题?

    3 回复  |  直到 6 年前
        1
  •  1
  •   khofaai    6 年前

    试试这个 event.stopPropagation() :

    $(".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":
    ...
    

    https://api.jquery.com/event.stoppropagation/

        2
  •  0
  •   Sumesh TG    6 年前
    $(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);
            });
    

    只需在添加处理程序之前解除previos click处理程序的绑定又来了。作为在jQuery 3.0中, .unbind() .off()