创建阻力&删除,目的地,保存重新创建-jQuery
Create Drag & Drop, Destory, Save Re-create - jQuery
好的,我有一个拖放问题。
他们所做的,他们点击一个按钮,它初始化整个拖放。
function sortElements() {
// Place droppable elements
var x = 0;
$("#content-body div[data-type='column'],#content-body div[data-type='carousel']").each(function() {
var el = $(this);
if(x == 0){
el.before('<div class="neoDroppableEle" id="neoDroppableEle-' + x + '"><'/div>');
x++;
}
el.addClass('edit_el').after('<div class="neoDroppableEle" id="neoDroppableEle-' + x + '"><'/div>');
x++;
el.append('<div class="drag-handle"><i class="fa fa-arrows"></i></div>');
var w = el.width();
el.css('width',w+'px');
});
$("#content-body div[data-type='insertable']").each(function() {
var el = $(this);
el.prepend('<div class="neoDroppableEle" id="neoDroppableEle-' + x + '"><'/div>');
x++;
});
// Swap entire columns
$("#content-body div[data-type='column']").draggable({
refreshPositions: true,
helper: "clone",
handle:'.drag-handle',
appendTo: "body",
zIndex: 10000,
start: function( event, ui ) {
$(".neoDroppableEle").addClass('dragging');
},
stop: function( event, ui ) {
$(".neoDroppableEle").removeClass('dragging');
}
});
$(".neoDroppableEle").droppable({
accept: "div[data-type='column']",
tolerance: "pointer",
hoverClass: "focus_in",
activeClass: "focus_in_active",
drop: function(event, ui) {
cur_ele = this.id;
var el = ui.draggable;
var html = el.html();
el.remove();
$("#" + cur_ele).replaceWith('<div class="row" data-type="column">'+html+'</div>');
}
});
// Swap individual photos within columns
$("#content-body div[data-type='imagewrap']").each(function(){
$(this).draggable({
revert: "invalid",
helper: "clone" ,
zIndex: 10001,
});
$(this).droppable({
accept: "div[data-type='imagewrap']",
activeClass: "ui-state-hover",
hoverClass: "ui-state-active",
drop: function( event, ui ) {
var draggable = ui.draggable, droppable = $(this);
draggable.swap(droppable);
}
});
});
}
完成后,他们再次单击按钮。
function sortElementsComplete() {
$(".ui-droppable").droppable("destroy");
$(".ui-draggable").draggable("destroy");
$(".edit_el").removeAttr('style').removeClass('edit_el');
$(".neoDroppableEle").remove();
$(".drag-handle").remove();
}
这一切运行和工作都很棒!
但现在我正在尝试在每次拖放后保存HTML代码以进行撤消。当我保存撤销时,我需要删除所有其他类和元素,我的函数可以拖放add。因为当他们单击"撤消"时,他们可能不在排序区域中,并且不希望拖动手柄和我设置为视觉辅助的边框出现。
所以现在我有了:
$(".neoDroppableEle").droppable({
accept: "div[data-type='column']",
tolerance: "pointer",
hoverClass: "focus_in",
activeClass: "focus_in_active",
drop: function(event, ui) {
cur_ele = this.id;
var el = ui.draggable;
var html = el.html();
el.remove();
$("#" + cur_ele).replaceWith('<div class="row" data-type="column">'+html+'</div>');
setTimeout(function(){
sortElementsComplete();
editor_add();
},1000);
}
});
上面的超时代码总是失败:
错误:无法在初始化之前调用可丢弃的方法;试图调用方法"destroy">
怎么会这样?它已初始化并正在运行。删除后,我应该能够销毁它,保存并重建它。使用disable会出现同样的错误。对我来说,这个错误毫无意义。
在运行editor_add((后,它会重新构建他们正在做的任何事情,在这种情况下,它会激发sortElements((;保存之后。
但是下面的运行良好?
// Swap individual photos within columns
$(this).droppable({
accept: "div[data-type='imagewrap']",
activeClass: "ui-state-hover",
hoverClass: "ui-state-active",
drop: function( event, ui ) {
var draggable = ui.draggable, droppable = $(this);
draggable.swap(droppable);
setTimeout(function(){
sortElementsComplete();
editor_add();
},250);
}
});
如果我没有上面的超时,它会出错。似乎250是最小值,任何低于它的值都会出错。但第一个永远不会起作用,无论我暂停的时间长短。
真希望这是有道理的。
如果我使用
var draggable = ui.draggable, droppable = $(this);
draggable.swap(droppable);
相反,它会起作用。o.o
相关文章:
- 创建新属性后的 JSON 空属性
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 如何基于数组值创建新实例
- 字符串中的
标记未正确在 HTML 中创建新行 - 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 查找关键字并创建新对象
- 从自身的一个版本中创建新的JavaScript对象
- 使用JSTree上下文菜单捕获新创建的节点
- 创建新对象时,为什么要更新旧对象
- 在onclick上动态创建新页面
- 为什么要使用立即调用的函数来创建新对象
- 如何在创建新网格之前销毁网格堆栈
- 将Backbone.View重新注入DOM,保留事件而不是创建新事件
- Chrome应用程序在全屏中创建新窗口-html元素不是全高的
- 使用具有用户定义字段的新请求者创建新的Zendesk票证
- 使用删除文本创建新行
- 如何在新创建的模块中从Odoo v8中的Javascript文件中调用python函数
- 从数组javascript创建新对象
- 在for循环-Javascript中创建新对象
- 确定是创建新对象还是更新现有对象