Контекстное меню Kendo-UI
Мы используем контекстное меню кендо в нашем коде. После инициализации контекстного меню, если мы удаляем целевой элемент и снова добавляем цель в контекстное меню DOM, не работает. Как решить эту проблему.
HTML
<ul id="menu">
<li>delete</li>
</ul>
<div class="parent" id="ParentDiv" style="width: 200px; height: 200px;">
</div>
скрипт
$(".parent").append('<div><div> <div class="child">item 1</div><div class="child">item 2</div><div class="child">item 3</div></div></div>');
$("#menu").kendoContextMenu({
orientation: "vertical",
target: ".child",
});
$(".parent").empty();
$(".parent").append('<div><div> <div class="child">item 1</div><div class="child">item 2</div><div class="child">item 3</div></div></div>');
2 ответа
Решение
Это должно работать, если вы вызываете setOptions
и определим снова target
, Ваш код будет что-то вроде:
$(".parent").append('<div><div> <div class="child">item 1</div><div class="child">item 2</div><div class="child">item 3</div></div></div>');
$("#menu").kendoContextMenu({
orientation: "vertical",
target: ".child",
});
$(".parent").empty();
$(".parent").append('<div><div> <div class="child">item 1</div><div class="child">item 2</div><div class="child">item 3</div></div></div>');
// Redefine target
$("#menu").setOptions({target: ".child"});
$(document).ready(function () {
$(".parent").append('<div><div> <div class="child">item 1</div><div class="child">item 2</div><div class="child">item 3</div></div></div>');
$("#menu").kendoContextMenu({
orientation: "vertical",
target: ".child"
});
$("button").on("click", function() {
$(".parent").empty();
$(".parent").append('<div><div> <div class="child">item 4</div><div class="child">item 5</div><div class="child">item 6</div></div></div>');
$("#menu").data("kendoContextMenu").setOptions({target: ".child"});
});
});
<link rel="stylesheet" href="http://cdn.kendostatic.com/2014.2.716/styles/kendo.common.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2014.2.716/styles/kendo.default.min.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://cdn.kendostatic.com/2014.2.716/js/kendo.all.min.js"></script>
<button id="button" class="k-button">Change</button>
<ul id="menu">
<li>delete</li>
</ul>
<div class="parent" id="ParentDiv" style="width: 200px; height: 200px;">
</div>
Вы можете создать отдельный пункт контекстного меню, а затем открыть его на указанном якоре. Для этого следует использовать опцию alignToAnchor и метод open с привязкой в качестве первого параметра.
Нет необходимости заново создавать контекстное меню каждый раз, когда вы отображаете его с различными элементами. Просто откройте его разными якорями.
<div id="target">Target</div>
<ul id="context-menu">
<li id="Item1">Item 1
<ul>
<li>Sub Item 1</li>
<li>Sub Item 2</li>
<li>Sub Item 3</li>
</ul>
</li>
<li>Item 2
<ul>
<li>Sub Item 1</li>
<li>Sub Item 2</li>
<li>Sub Item 3</li>
</ul>
</li>
</ul>
<script>
// initialize the ContextMenu
$("#context-menu").kendoContextMenu({
target: "#target",
alignToAnchor: true
});
// get a reference to the ContextMenu widget
var contextMenu = $("#context-menu").data("kendoContextMenu");
// open the ContextMenu at 100px, 100px
contextMenu.open($('#target'));