Draggabilly 不向新添加的元素添加事件
Draggabilly not adding event to newly added element
我正在使用 desandro draggabilly,但在插入新元素时遇到问题。该事件似乎没有在添加的新元素上触发。
这里是 jsfiddle。
这也是代码。
HTML
<div class="box draggable">1</div>
CSS
.box {
width: 200px;
height: 200px;
border: 1px solid red;
display: block;
}
JQUERY
$(document).ready(function () {
$.bridget('draggabilly', Draggabilly);
var $draggable = $('.draggable').draggabilly({
axis: 'x'
});
$draggable.on('dragEnd', function(e, p) {
$(this).parent().prepend('<div class="box draggable">2</div>');
$(this).prev().addClass('draggable')
$(this).remove();
});
});
在下面的代码中,当我拖动 div 1 时,在 dragEnd
上,它将插入 div 2,其 class 为 draggable
,然后删除div 1. 这里的问题是 div 2 不可拖动,即使它的 class 为 draggable
。
您需要在 prepending
之后重新初始化它,因为它是动态添加到 DOM 并且 event draggabilly
不会附加到它。所以下面将解决这个问题:
$draggable.on('dragEnd', function(e, p) {
$(this).parent().prepend('<div class="box draggable">2</div>');
$('.draggable').draggabilly({
axis: 'x'
}); //re-initialize again
$(this).remove();
});
更新
现在,如果你想调用 dragend
事件到你添加的元素并继续递增 dragend
上的数字,只需保留一个全局变量说 i
并每次递增它作为下面:
var i=1; //global variable
$(document).ready(function () {
$.bridget('draggabilly', Draggabilly);
$('.draggable').draggabilly({
axis: 'x'
});
$(document).on('dragEnd','.draggable', function(e, p) {
i++; //increment it
$(this).parent().prepend('<div class="box draggable">'+i+'</div>');
//display text as i
$('.draggable').draggabilly({
axis: 'x'
});
$(this).remove();//remove previous one
});
});
每次创建 div 时都必须初始化,然后绑定事件
如下所示 -
$(document).ready(function () {
$.bridget('draggabilly', Draggabilly);
var $draggable = $('.draggable').draggabilly({
axis: 'x'
});
$draggable.on('dragEnd', callback);
});
var co=2;
function callback(e, p) {
$(this).parent().prepend('<div class="box draggable">'+co++ +'</div>');
$(this).prev().addClass('draggable')
$(this).remove();
$(".draggable").draggabilly({
axis: 'x'
});
$(".draggable").on('dragEnd', callback);
}
我正在使用 desandro draggabilly,但在插入新元素时遇到问题。该事件似乎没有在添加的新元素上触发。
这里是 jsfiddle。
这也是代码。
HTML
<div class="box draggable">1</div>
CSS
.box {
width: 200px;
height: 200px;
border: 1px solid red;
display: block;
}
JQUERY
$(document).ready(function () {
$.bridget('draggabilly', Draggabilly);
var $draggable = $('.draggable').draggabilly({
axis: 'x'
});
$draggable.on('dragEnd', function(e, p) {
$(this).parent().prepend('<div class="box draggable">2</div>');
$(this).prev().addClass('draggable')
$(this).remove();
});
});
在下面的代码中,当我拖动 div 1 时,在 dragEnd
上,它将插入 div 2,其 class 为 draggable
,然后删除div 1. 这里的问题是 div 2 不可拖动,即使它的 class 为 draggable
。
您需要在 prepending
之后重新初始化它,因为它是动态添加到 DOM 并且 event draggabilly
不会附加到它。所以下面将解决这个问题:
$draggable.on('dragEnd', function(e, p) {
$(this).parent().prepend('<div class="box draggable">2</div>');
$('.draggable').draggabilly({
axis: 'x'
}); //re-initialize again
$(this).remove();
});
更新
现在,如果你想调用 dragend
事件到你添加的元素并继续递增 dragend
上的数字,只需保留一个全局变量说 i
并每次递增它作为下面:
var i=1; //global variable
$(document).ready(function () {
$.bridget('draggabilly', Draggabilly);
$('.draggable').draggabilly({
axis: 'x'
});
$(document).on('dragEnd','.draggable', function(e, p) {
i++; //increment it
$(this).parent().prepend('<div class="box draggable">'+i+'</div>');
//display text as i
$('.draggable').draggabilly({
axis: 'x'
});
$(this).remove();//remove previous one
});
});
每次创建 div 时都必须初始化,然后绑定事件 如下所示 -
$(document).ready(function () {
$.bridget('draggabilly', Draggabilly);
var $draggable = $('.draggable').draggabilly({
axis: 'x'
});
$draggable.on('dragEnd', callback);
});
var co=2;
function callback(e, p) {
$(this).parent().prepend('<div class="box draggable">'+co++ +'</div>');
$(this).prev().addClass('draggable')
$(this).remove();
$(".draggable").draggabilly({
axis: 'x'
});
$(".draggable").on('dragEnd', callback);
}