问题描述
JS
var placeholderCounter = 1;
$(function () {
$("#sortable0").sortable({
revert: true,placeholder: "ui-state-highlight",over: function() {
$('#sortable0 .placeholder').hide();
},out: function() {
$('#sortable0 .placeholder').show();
},stop: function() {
$('#sortable0 .placeholder').remove();
}
});
$(".draggable").draggable({
connectToSortable: ".sortable",helper: "clone",revert: "invalid",stop: function (event,ui) {
ui.helper.append("<a class=\"delete\">X</a>")
}
});
$("ul,li").disableSelection();
});
$(".newSectionOne").click(function () {
$(".mail-area").last("ul").after().append("</ul><ul class=\"sortable ui-sortable\" id=\"sortable"+placeholderCounter+"\">\n" +
"<li class=\"ui-state-highlight ui-sortable-handle placeholder"+placeholderCounter+"\" id='placeholder"+placeholderCounter+"'>Drop Items here</li>\n" +
"</ul>");
$("#sortable"+placeholderCounter).sortable({
revert: true,over: function(event,ui) {
$('.placeholder'+placeholderCounter).hide();
},out: function(event,ui) {
$('.placeholder'+placeholderCounter).show();
},stop: function(event,ui) {
$('.placeholder'+placeholderCounter).remove();
}
});
placeholderCounter++;
});
$(".newSectionTwo").click(function () {
var columnOneCounter = placeholderCounter;
placeholderCounter++;
var columnTwoCounter = placeholderCounter;
placeholderCounter++;
$(".mail-area").last("ul").after().append("</ul><div class='row'><div class='col-md-6'><ul class=\"sortable ui-sortable\" id=\"sortable"+columnOneCounter+"\">\n" +
"<li class=\"ui-state-highlight ui-sortable-handle placeholder"+columnOneCounter+"\">Drop Items here</li>\n" +
"</ul></div><div class='col-md-6'><ul class=\"sortable ui-sortable\" id=\"sortable"+columnTwoCounter+"\">\n" +
"<li class=\"ui-state-highlight ui-sortable-handle placeholder"+columnTwoCounter+"\">Drop Items here</li>\n" +
"</ul></div></div>");
$("#sortable"+columnOneCounter).sortable({
revert: true,ui) {
$('.placeholder'+columnOneCounter).hide();
},ui) {
$('.placeholder'+columnOneCounter).show();
},ui) {
$('.placeholder'+columnOneCounter).remove();
}
});
$("#sortable"+columnTwoCounter).sortable({
revert: true,ui) {
$('.placeholder'+columnTwoCounter).hide();
},ui) {
$('.placeholder'+columnTwoCounter).show();
},ui) {
$('.placeholder'+columnTwoCounter).remove();
}
});
});
$(document.body).on("click",".delete",function () {
$(this).parent().remove();
});
HTML
<div class="mail-area">
<ul class="sortable ui-sortable" id="sortable0">
<li class="ui-state-highlight placeholder">Drop Items here</li>
</ul>
</div>
<div class="btn">
<a class="newSectionOne">One Column</a>
</div>
<div class="btn">
<a class="newSectionTwo">Two Column</a>
</div>
<hr>
<div class="draggable">
<div align="center"><a href="$1" class="button button--green" style="background:#44AD34;border-radius:4px;Box-shadow:0 4px 12px 0 rgba(68,173,52,.24);color:#FFF!important;display:inline-block;font-family:Helvetica,Arial,sans-serif;font-size:17px;font-weight:500;line-height:1.3;margin-bottom:16px;padding:13px 16px;text-align:left;text-decoration:none">$2</a></div>
</div>
JSfiddle演示:http://jsfiddle.net/9do7xs30/3/
我尝试通过按钮在单个页面上动态插入许多可排序对象。所有这些元素都插入了一个占位符,但是如果将元素拖动到可排序区域上,则该占位符应消失。 我以为可以通过over / out / stop函数中的事件变量来实现,但是没有成功。也许CSS可以做到这一点?
解决方法
通过ui.helper函数自行完成
$("#sortable0").sortable({
revert: true,placeholder: "ui-state-highlight",over: function(event,ui) {
ui.helper.parent().find('.placeholder').hide();
},out: function(event,ui) {
ui.helper.parent().find('.placeholder').show();
},stop: function(event,ui) {
ui.helper.parent().find('.placeholder').remove();
}
});