javascript - jQuery动态添加可放置区域
问题描述
在以下代码中,单击按钮会动态添加一个可放置区域。但是,拖放在动态添加的可放置区域上不起作用。如您在以下代码中所见,它适用于预构建可放置区域。
我该如何解决?
$(".draggable").draggable({
connectToSortable: ".sortable",
helper: "clone",
revert: "invalid",
});
$(".droppable").droppable({
accept: ".draggable",
hoverClass: "droppable",
drop: function( event, ui ) {
$( this )
.addClass( "droppable" )
.html( "Dropped!" );
}
});
$('button').on('click', function(e){
$('.droppables').append('<div class="droppable ui-droppable">Drop</div>');
});
body {
padding: 20px;
font-family: Helvetica;
}
.draggables,
.droppables{
overflow: hidden;
margin-bottom: 30px;
}
.draggable,
.droppable{
width: 100px;
height: 100px;
background: #74B9FF;
float: left;
margin-right: 10px;
text-align: center;
padding-top: 40px;
box-sizing: border-box;
cursor: move;
}
.droppable {
background: #FFEAA7;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div class="draggables">
<div class="draggable">Drag me</div>
<div class="draggable">Drag me</div>
<div class="draggable">Drag me</div>
<div class="draggable">Drag me</div>
</div>
<div class="droppables">
<div class="droppable">Drop</div>
</div>
<button>Add droppable</button>
解决方案
您需要对droppable()
添加到 DOM 的每个新 div 进行实例化:
$(".draggable").draggable({
connectToSortable: ".sortable",
helper: "clone",
revert: "invalid",
});
let droppableDefaultSettings = {
accept: ".draggable",
hoverClass: "droppable",
drop: function(event, ui) {
$(this).addClass("droppable").html("Dropped!");
}
}
$(".droppable").droppable(droppableDefaultSettings);
$('button').on('click', function(e) {
$('<div class="droppable ui-droppable">Drop</div>').appendTo('.droppables').droppable(droppableDefaultSettings);
});
body {
padding: 20px;
font-family: Helvetica;
}
.draggables,
.droppables {
overflow: hidden;
margin-bottom: 30px;
}
.draggable,
.droppable {
width: 100px;
height: 100px;
background: #74B9FF;
float: left;
margin-right: 10px;
text-align: center;
padding-top: 40px;
box-sizing: border-box;
cursor: move;
}
.droppable {
background: #FFEAA7;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div class="draggables">
<div class="draggable">Drag me</div>
<div class="draggable">Drag me</div>
<div class="draggable">Drag me</div>
<div class="draggable">Drag me</div>
</div>
<div class="droppables">
<div class="droppable">Drop</div>
</div>
<button>Add droppable</button>
推荐阅读
- javascript - angularjs控制器中的window.addEventListener导致调用两次或更多次
- haskell - 为什么 Haskell 中默认不启用某些语法语言扩展?
- rundeck - 动态选项和 rd-cli
- javascript - 如何从变量中创建具有键名的对象
- symfony - 致命错误:方法 class@anonymous::__toString() 在作曲家安装后不得抛出异常
- python - 拥有一个每个进程管理一个 ThreadPoolExecutor 的 multiprocessing.Pool 有什么好处吗?
- php - 如何在foreach循环中为每个设置25个项目
- javascript - 如何使用 JQuery/Javascript 翻译表格中的文本?
- terraform - 在自定义 Terraform 提供者的测试中,我可以加载另一个提供者吗?
- reactjs - 在 React 中,如何在渲染之前访问道具(不使用 componentWillReceiveProps)