我通过JS创建了一个表,在单元格内部有可放置的div。如果我将元素放入其中,则tge drop函数会触发两次。 (见控制台)。我想这可以用于循环......
Jsbin :http://jsbin.com/OMIbOGU/50/edit
JS
$("document").ready(function(){
function init(){
var table = $("<table></table>");
$("body").append(table);
for(var i=0 ;i < 9; i++){
var row = $("<tr></tr>");
var cell = $("<td></td>");
for(var j = 0;j<2;j++){
var slot = $("<div></div>").addClass('slot');
slot.droppable({
accept: ".unassigned",
tolerance: "touch",
drop:function(){
console.log("dropped");
}
});
if (j!==1)
slot.addClass("dotted");
cell.append(slot);
}
row.append(cell);
table.append(row);
}
$(".unassigned").draggable({
revert: "invalid",
snap: "td div"
});
}
for(var k = 0 ; k<4;k++)
init();
});
答案 0 :(得分:0)
通常,使用greedy:true初始化droppable函数必须要做到这一点。 但不幸的是,它对我也没有用。 所以我使用了回调函数drop中传递的参数和该参数的全局事件编号。
$("document").ready(function(){
guid=0;
function init(){
var table = $("<table></table>");
$("body").append(table);
for(var i=0 ;i < 9; i++){
var row = $("<tr></tr>");
var cell = $("<td></td>");
for(var j = 0;j<2;j++){
var slot = $("<div></div>").addClass('slot');
slot.droppable({
accept: ".unassigned",
tolerance: "touch",
drop:function(lev,lui){
if(guid != lev.handleObj.guid)
{
console.log("dropped");
guid = lev.handleObj.guid;
}
}
});
if (j!==1)
slot.addClass("dotted");
cell.append(slot);
}
row.append(cell);
table.append(row);
}
$(".unassigned").draggable({
revert: "invalid",
snap: "td div"
});
}
for(var k = 0 ; k<4;k++)
init();
});
所以它很好,我希望...
答案 1 :(得分:-1)
看起来像是由宽容引起的:“触摸”,试试这个
Javascript
slot.droppable({
accept: ".unassigned",
tolerance: "pointer",//changed "touch" -> "pointer"
drop:function(){
console.log("dropped");
}
});
或者在放置目标div之间添加更多空间,以便不“触摸”邻居