功能单击不适用于右键单击li元素

时间:2018-09-04 11:11:08

标签: javascript jquery html

当我在<a href="#" class="sim-row-edit" data-type="link">Portfolio</a>上按鼠标右键时,会出现右键菜单。

出现右键菜单,其中包含3个选项:

<ul class='custom-menu'>
  <li data-action = "first">First thing</li>
  <li data-action = "second">Second thing</li>
  <li data-action = "third">Third thing</li>
</ul>

当我单击这些li元素时,应该收到一条我没有收到的消息。

下面是我的代码:

// when we're about to show the context menu, show our own instead
$(document).on("contextmenu", function (event) {
    // Avoid the real one if this is the link
    if ($(event.target).hasClass("sim-row-edit")) {
      event.preventDefault();
      // Show contextmenu
      $(".custom-menu").show(100).
          css({
              top: event.pageY + "px",
              left: event.pageX + "px"
          });
    }
});

// hide our context menu when the document is clicked
$(document).on("mousedown", function () {
    $(".custom-menu").hide(100);
});

$(".custom-menu li").click(function(){
	alert("hii");
    // This is the triggered action name
    switch($(this).attr("data-action")) {
        // A case for each action. Should personalize to your actions
        case "first": 
            console.log("first"); 
            break;
        case "second": 
            console.log("second");
            break;
        case "third": 
            console.log("third"); 
            break;
    }
  });
.custom-menu {
    display: none;
    z-index:1000;
    position: absolute;
    background-color:#fff;
    border: 1px solid #ddd;
    overflow: hidden;
    width: 120px;
    white-space:nowrap;
    font-family: sans-serif;
    -webkit-box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
    -moz-box-shadow:    2px 2px 7px 0px rgba(50, 50, 50, 0.5);
    box-shadow:         2px 2px 7px 0px rgba(50, 50, 50, 0.5);
}

.custom-menu li {
    padding: 5px 10px;
}

.custom-menu li:hover {
    background-color: #4679BD;
    cursor: pointer;
}
<link href="style.css" rel="stylesheet" type="text/css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="script.js"></script>

<a href="#" class="sim-row-edit" data-type="link">Portfolio</a>
<ul class='custom-menu'>
  <li data-action = "first">First thing</li>
  <li data-action = "second">Second thing</li>
  <li data-action = "third">Third thing</li>
</ul>

代码$(".custom-menu li").click(function(){...无法正常工作。

2 个答案:

答案 0 :(得分:2)

您只需使用mouseup而不是mousedown,以便可以在隐藏目标元素之前触发click事件:

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

// when we're about to show the context menu, show our own instead
$(document).on("contextmenu", function(event) {
  // Avoid the real one if this is the link
  if ($(event.target).hasClass("sim-row-edit")) {
    event.preventDefault();
    // Show contextmenu
    $(".custom-menu").show(100).
    css({
      top: event.pageY + "px",
      left: event.pageX + "px"
    });
  }
});

// hide our context menu when the document is clicked
$(document).on("mouseup", function() {
  $(".custom-menu").hide(100);
});

$(".custom-menu li").click(function() {
  alert("hii");
  // This is the triggered action name
  switch ($(this).attr("data-action")) {
    // A case for each action. Should personalize to your actions
    case "first":
      console.log("first");
      break;
    case "second":
      console.log("second");
      break;
    case "third":
      console.log("third");
      break;
  }
});
.custom-menu {
  display: none;
  z-index: 1000;
  position: absolute;
  background-color: #fff;
  border: 1px solid #ddd;
  overflow: hidden;
  width: 120px;
  white-space: nowrap;
  font-family: sans-serif;
  -webkit-box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
  -moz-box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
  box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
}

.custom-menu li {
  padding: 5px 10px;
}

.custom-menu li:hover {
  background-color: #4679BD;
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="sim-row-edit" data-type="link">Portfolio</a>
<ul class='custom-menu'>
  <li data-action="first">First thing</li>
  <li data-action="second">Second thing</li>
  <li data-action="third">Third thing</li>
</ul>

答案 1 :(得分:0)

我使用与动态元素相同的语法对其进行了修复:

$(document).on("click", ".custom-menu li", function(e) { ...

相关问题