如何删除动态创建的对象 jQuery UI

How to remove dynamicaly created object jQuery UI

我使用 jQuery UI 可拖动和可调整大小的对象。

Here u can see example

正如您在顶部看到的,我有 2 个输入,用户可以在其中添加一些宽度和高度参数,单击 ob 按钮后 添加区域 用户可以在视图中看到新区域。

在悬停时我添加了删除按钮,但是这个按钮并没有作为方面起作用。这个按钮删除了第一个对象,但是如果用户添加了几个对象,例如想要删除对象#3,它就不会删除。

我尝试了几种删除对象的方法,但都不起作用。

现在我用这个方法删除:

$(document).on("mouseover", function(event) {
  console.log('#' + event.target.id + '')
  $('#' + event.target.id + '').find("#delete-area").toggleClass("hide")
  $('#' + event.target.id + '').find("#delete-area").toggleClass("gg-remove")
  $("#delete-area").click(function() {
    $('#' + event.target.id + '').parent().remove();
  });
});

但是这会删除页面中的所有视图。

问题是您有多个具有相同 ID 的元素。 ID 应始终是唯一的。

$(document).on("mouseenter",".grid-item", function(event) {
  $(this).find(".delete-area").toggleClass("hide gg-remove")
});
$(document).on("mouseleave",".grid-item", function(event) {
  $(this).find(".delete-area").toggleClass("hide gg-remove")
});

$(document).on("click",".delete-area",function() {
  $(this).parent().remove();
});

我在js代码中把id改成了class,现在可以了

在另一个事件中还有一个点击事件,每次触发另一个事件时都会继续生成点击事件。我稍微移动了你的代码

我还建议您使用 mouseenter 而不是鼠标悬停。

演示

var count = 0;

$(".lpms-3-button").click(function() {
  count += 1;

  var areaWith = $("#width-area").val();
  var areaHeight = $("#height-area").val();
  var areaColor = $("#text").val();
  var valueStream = $("#valueStream option:selected").text();
  console.log(areaWith, areaHeight, valueStream)
  var objects1 = `<div class="grid-item" data-value-stream="${valueStream}" id="boxVs${count}" style="width:${areaWith + "px"};height:${areaHeight + "px"}; left: 0px; top: 0px; background-color: #ccc ">
<a href="#" id="" class="btn btn-remove  hide delete-area"></a >

</div>`

  $(".grid").append(objects1);
  $(".grid-item").draggable({
    grid: [10, 10],
    snap: ".drop-target"
  });

  $(".drop-target").droppable({
    accept: ".drag-item"
  });
  $('.grid-item').resizable();
  $("#width-area").val("");
  $("#height-area").val("");
  $("#text").val("")
});

var myDraggable = $('.grid-item').draggable();
var widget = myDraggable.data('ui-draggable');
var clickEvent = null;

myDraggable.click(function(event) {
  if (!clickEvent) {
    widget._mouseStart(event);
    clickEvent = event;
  } else {
    widget._mouseUp(event);
    clickEvent = null;
  }
});

$(document).on("mouseenter",".grid-item", function(event) {
  $(this).find(".delete-area").toggleClass("hide gg-remove")
});
$(document).on("mouseleave",".grid-item", function(event) {
  $(this).find(".delete-area").toggleClass("hide gg-remove")
});

$(document).on("click",".delete-area",function() {
  $(this).parent().remove();
});
.resizable {
  position: absolute;
  bottom: 2px;
  right: 5px;
  cursor: pointer;
}

.drop-target {
  width: 100%;
  height: 100vh;
  border: dashed 1px orange;
  background: whitesmoke url('https://s3.amazonaws.com/com.appgrinders.test/images/grid_20.png') repeat;
}

.area-builder {
  display: contents;
}



.gg-remove {
  box-sizing: border-box;
  position: relative;
  display: block;
  float: right;
  top: 5px;
  right: 5px;
  transform: scale(var(--ggs, 1));
  width: 22px;
  height: 22px;
  border: 2px solid;
  border-radius: 22px
}

.gg-remove::before {
  content: "";
  display: block;
  box-sizing: border-box;
  position: absolute;
  width: 10px;
  height: 2px;
  background: currentColor;
  border-radius: 5px;
  top: 8px;
  left: 4px
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div class="area-builder">
  <input type="number" min="0" id="width-area" class="form-control" placeholder="Width">
  <input type="number" min="0" id="height-area" class="form-control" placeholder="Height">
  <select id="valueStream">
    <option value="0">1</option>
    <option value="1">2</option>
    <option value="2">3</option>
    <option value="3">4</option>
  </select>
  <button type="button" class="lpms-3-button">Add area</button>
</div>


<div class="drop-target">
  <div class="grid">
  </div>
</div>