Не рекомендуется использовать Удалить во время редактирования содержимого.Вы захотите убедиться, что пользователь может щелкнуть сам элемент <div>
без редактирования содержимого.
Поскольку <div>
перетаскивается, я бы посоветовал использовать дескриптор, начиная с события click
и * 1008.* события могут получить захват для редактирования контента, а не для вашего сценария.
$(function() {
function disDrag(part) {
var drag = part.closest(".draggable");
drag.draggable("disable");
$(".drag-content", drag).removeAttr("contenteditable").blur();
part.toggleClass("ui-icon-locked ui-icon-unlocked");
}
function enDrag(part) {
var drag = part.closest(".draggable");
drag.draggable("enable");
$(".drag-content", drag).attr("contenteditable", true).focus();
part.toggleClass("ui-icon-locked ui-icon-unlocked");
}
function delDrag(part) {
var drag = part.closest(".draggable");
var res = confirm("Are you sure you wish to delete this item?");
if (res) {
drag.remove();
}
}
$('.draggable')
.draggable({
containment: "parent",
handle: ".ui-drag-handle",
start: function() {
$(".ui-drag-handle", this).data("selectable", false);
},
stop: function() {
$(".ui-drag-handle", this).data("selectable", true);
}
})
.resizable();
$(".ui-drag-handle")
.data("selectable", true)
.click(function(e) {
var drag = $(this).closest(".draggable");
if ($(this).data("selectable")) {
drag.toggleClass("drag-selected");
}
});
$(".btn").click(function(e) {
switch (true) {
case $(this).hasClass("ui-icon-unlocked"):
disDrag($(this));
break;
case $(this).hasClass("ui-icon-locked"):
enDrag($(this));
break;
case $(this).hasClass("ui-icon-close"):
delDrag($(this));
break;
}
});
$(document).keyup(function(e) {
if (e.which == 46 && $(".drag-selected").length) {
delDrag($(".drag-selected"));
}
});
});
#myContainer {
border: 1px solid black;
height: 400px;
width: 100%;
}
.draggable {
border: 1px solid blue;
}
.draggable.drag-selected {
border: 1px solid #0f0;
}
.center {
margin-left: 50%;
}
.right {
float: right;
}
.ui-icon.btn {
border: 1px solid #ccc;
border-radius: 3px;
margin-top: 0px;
margin-left: 1px;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<div id="myContainer">
<div class="draggable ui-widget" id="DraggableDiv">
<div class="ui-widget-header">
<span class="right ui-icon ui-icon-close btn" title="Delete the item."></span>
<span class="right ui-icon ui-icon-unlocked btn" title="Lock and disable Drag"></span>
<div class="ui-drag-handle" style="width: calc(100% - 42px);">
<span class="center ui-icon ui-icon-grip-dotted-horizontal"></span>
</div>
</div>
<div class="drag-content" contenteditable="true">
THIS IS MY TEXT INSIDE THE DIV
</div>
</div>
</div>
Вы можете видеть, что это перетаскиваемый, изменяемый размер и редактируемый.Пользователь может отключить перетаскивание, нажав на значок замка.Если выбрать элемент div и нажать «Удалить» (или код клавиши 46), или они щелкают значок закрытия, им будет предложено подтвердить, что они хотят удалить элемент.Как только они подтвердят, что они хотят Да, элемент будет удален.
Поскольку удаление может быть инициировано двумя различными способами, я создал функцию удаления.
Что касается структуры, вы можетене сможет сойти с рук с такими простыми структурами HTML при работе с более сложными взаимодействиями пользовательского интерфейса.Этот элемент <div>
имел всевозможные взаимодействия, связанные с событием click
.Пользователь нажимает, чтобы редактировать, выбирать, перетаскивать ... Лучше сделать более конкретные цели для некоторых из этих событий, чтобы вы могли лучше составлять сценарии своих событий.
Вы можете сэкономить много времени, используяВиджет диалога: https://jqueryui.com/dialog/
Надеюсь, это поможет.