nig*_*gel 5 jquery jquery-ui contextmenu jquery-ui-contextmenu
我有多个DOM元素和上下文菜单.当一个元素是另一个元素的子元素并且我调用内部子元素的上下文菜单时,我也会看到父元素的上下文菜单.这是使用jquery-ui.contextmenu插件实现的.
有没有办法配置插件以防止显示父菜单,或者我将不得不手动处理所有点击事件并过滤它们,所以我只显示我想要的菜单?
以下是我的代码:
HTML:
<!-- 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>
Run Code Online (Sandbox Code Playgroud)
CSS:
.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;
}
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
// 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({
menu: [
{title: "Inner Menu", cmd: "inner-menu"}
],
select: function(event, ui) {
alert("select " + ui.cmd + " on " + ui.target.text());
}
});
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到一个jsfiddle演示.(右键单击内框并查看上下文菜单)
您可以通过event.stopPropagation()在beforeOpen子元素的情况下调用方法来解决此问题.
// 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());
}
});Run Code Online (Sandbox Code Playgroud)
.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;
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1861 次 |
| 最近记录: |