如何使动态创建的元素可拖动()
how do i make dynamically created elements draggable()?
我正在尝试弄清楚如何使动态创建的div可拖动,所以我创建了这个非常简单的东西来帮助我。我知道我必须将 on() 事件与非动态处理程序一起使用。通过让 body 元素处理链接的 JSfiddle 中的克隆事件,我成功地使动态创建的div 可克隆,但它们不可拖动。我做错了什么?
提前感谢您的帮助!
$(document).ready(function () {
$("body").on('click', '.pink', function () {
$('.container').append($("<div class='bl pink'></div>"))
});
$("body").on('click', '.blue', function () {
$('.container').append($("<div class='bl blue'></div>"))
});
$("body").on('click', '.coral', function () {
$('.container').append($("<div class='bl coral'></div>"))
});
$(".draggable").draggable();
});
在创建时将类"可拖动"或id放在元素中。(你不是在放类),然后代码应该可以工作
$('.container').append($("<div class='bl pink draggable'></div>"));
$('.draggable').draggable()
我会做这样的事情
我将元素添加到容器后调用 draggable
方法,如下所示:
$("<div class='bl pink'></div>").appendTo('.container').draggable();
我遇到了同样的问题。公认的答案当然有效,但我正在寻找一个更干净、更集中的解决方案。我不想在我的脚本插入新元素的每个地方显式调用 .draggable()。
我决定在父元素上侦听 DOM 插入,然后在插入的子元素上应用 .draggable()。例如:
$("#Parent").on("DOMNodeInserted", ".ChildClass", function() { $(this).draggable(); });
查看此小提琴的演示:http://jsfiddle.net/9hL7u95L/
使用
$("<div class='bl blue'></div>").draggable().appendTo($('.container'));
演示
$(document).ready(function () {
$('.container').on('click', '.pink', function () {
$("<div class='bl blue'></div>").draggable().appendTo($('.container'));
});
$('.container').on('click', '.blue', function () {
$("<div class='bl blue'></div>").draggable().appendTo($('.container'));
});
$('.container').on('click', '.coral', function () {
$("<div class='bl coral'></div>").draggable().appendTo($('.container'));
});
$(".draggable").draggable();
});
.appendTo
将可拖动的类添加到动态添加的元素中。
$(document).ready(function () {
$("body").on('click', '.pink', function () {
$('.container').append($("<div class='bl pink draggable'></div>"));
$(".draggable").draggable();
});
$("body").on('click', '.blue', function () {
$('.container').append($("<div class='bl blue draggable'></div>"));
$(".draggable").draggable();
});
$("body").on('click', '.coral', function () {
$('.container').append($("<div class='bl coral draggable'></div>"));
$(".draggable").draggable();
});
});
您可以通过以下方式执行此操作:
$(document).ready(function () {
$('.container').on('click', '.pink', function () {
$('.container').append($("<div class='bl pink draggable'></div>"));
$('.draggable').draggable();
});
$('.container').on('click', '.blue', function () {
$('.container').append($("<div class='bl blue draggable'></div>"));
$('.draggable').draggable();
});
$('.container').on('click', '.coral', function () {
$('.container').append($("<div class='bl coral draggable'></div>"));
$('.draggable').draggable();
});
$('.draggable').draggable();
});
工作演示
我在小提琴中添加了一些内容,希望它会有所帮助:http://jsfiddle.net/m3BXZ/8/
基本上,我做了一个名为startDrag的函数,使新块可拖动:
function startDrag(){
$(".bl").draggable();
}
有很多方法可以做到这一点,只需找到最适合您的解决方案。
试试这个(示例):
$('.btn-hotspot-add').click(function(){
//Create element and append draggable action
var element = $('<span class="hotspot"></span>').draggable({
'containment': "parent",
'stop': function(elm){
//Sample stop action
var parentWith = elm.target.offsetParent.offsetWidth;
var parentHeight = elm.target.offsetParent.offsetHeight;
var x = elm.target.offsetLeft;
var y = elm.target.offsetTop;
console.log(parentWith+'x'+parentHeight+' - '+x+'x'+y );
}
});
//Append draggable element to parent container
$('#parent').append(element);
});
相关文章:
- 如何使元素在可拖动元素内可单击
- 拖动开始时更改可拖动元素的大小
- 无法为HTML5中具有画布和图像的可拖动元素设置“拖动图像”
- 具有可拖动元素的HTML到PDF
- 可缩放容器鼠标上的可拖动元素在创建时从辅助对象上浮动
- 删除所有可拖动元素后如何显示消息
- 将可拖动元素与从父项位置开始的网格对齐
- 拖动元素时,如何获取要替换的元素的位置
- 将id为X的可拖动元素拖放到id为Y的容器
- 在没有jQuery的情况下拖动元素
- 可拖动元素在悬停在另一个'It’s draggable
- 拖动时更改HTML5可拖动元素的“克隆”文本
- Javascript:当元素中有<选择>时,可拖动元素搞砸了
- 是否有可能知道 jquery 可拖动元素将恢复到哪里
- 如何将键控事件与 JQuery-ui 可拖动元素一起使用
- jQuery UI 可拖动元素位于其他可拖动元素下
- 从拖动元素中获取 HTML5 自定义数据属性
- 使用 D3.js 拖动元素时滚动
- 同步两个可拖动元素的位置
- 如何从可拖动元素中删除项目符号