Context menu on nested child element also shows parent context menu

僤鯓⒐⒋嵵緔 提交于 2019-12-05 11:10:11

You can fix this issue by calling event.stopPropagation() method in the beforeOpen event of child element.

// create context menu on outer child
$("#outer-child").contextmenu({
  menu: [{
    title: "This is the Outer Menu",
    cmd: "outer-menu"
  }],
  select: function(event, ui) {
    alert("select " + ui.cmd + " on " + ui.target.text());
  },

});


// create context menu on inner child
$('#inner-child').contextmenu({
  beforeOpen: function(event, ui) {
    event.stopPropagation();
  },
  menu: [{
    title: "Inner Menu",
    cmd: "inner-menu"
  }],
  select: function(event, ui) {
    alert("select " + ui.cmd + " on " + ui.target.text());
  }
});
.outer-child {
  position: absolute;
  top: 0px;
  left: 0px;
  width: 200px;
  height: 200px;
  border: 1px solid red;
  background: green;
}
.inner-child {
  position: absolute;
  top: 50px;
  left: 50px;
  width: 100px;
  height: 100px;
  border: 1px solid blue;
  background: yellow;
}
<link href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<script src="http://wwwendt.de/tech/demo/jquery-contextmenu/jquery.ui-contextmenu.js"></script>
<!-- Create an area to contain our editable components -->
<div class="container" id="container">
  <!-- Add a child which will have a context menu -->
  <div class="outer-child" id="outer-child">Outer Child
    <!-- inner child with its own context menu -->
    <div class="inner-child" id="inner-child">Inner Child</div>
  </div>
</div>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!