动态添加的元素无法拖动
Dynamically added element is fail to draggable
我使用下面的快照添加了动态内容
var obj = {"Test Tube": "test.png","Beater": "beat.png"};
$.each( obj, function( key, value ) {
$(".instruments").append('<div class="tile bg-gray">'
+'<div class="tile-content image">'
+'<img src="'+value+'">'
+'</div>'
+'<div class="brand">'
+'<span class="label fg-white">'+key+'</span>'
+'</div>'
+'</div>');
});
$(".tile").click(function(){
var imgSelected = $(this).find("img").attr("src");
$(".working-area").append('<div id="draggable" class="ui-widget-content" style="border:solid 1px;"><img src="'+imgSelected+'" width="100px" height="100px" /></div>');
});
现在我需要将新添加的#draggable div 设为可拖动元素。为此,我有如下代码
$(function() {
$( "#draggable" ).draggable();
});
但它适用于静态元素不适用于动态添加的 divs,如 id #draggable
我有 link 这些外部 js 和 css
<link href="http://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css" rel="stylesheet">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
我不知道为什么这对动态 divs
是错误的
问题是,
$(function() {
$( "#draggable" ).draggable();
});
等同于 $( document ).ready()
。因此,当调用此方法时.. 只有那些当时存在的元素将被初始化为 draggable
behavior.And 其他动态元素将没有此初始化。
因此,添加这些动态元素后,您必须重新初始化 draggable
,
$(".tile").click(function(){
var imgSelected = $(this).find("img").attr("src");
$(".working-area").append('<div id="draggable" class="ui-widget-content" style="border:solid 1px;"><img src="'+imgSelected+'" width="100px" height="100px" /></div>');
$( "#draggable" ).draggable();
});
另外,我建议您使用 class 选择器而不是 id 选择器来初始化 draggable
.
查看此代码块,id
参数似乎在 DOM 中重复,这不是好的做法。 id
是唯一的,这将导致只有一个元素是 draggable
.
$(".tile").click(function(){
var imgSelected = $(this).find("img").attr("src");
//FIXME : Chance of Duplicate id
$(".working-area").append('<div id="draggable" class="ui-widget-content" style="border:solid 1px;"><img src="'+imgSelected+'" width="100px" height="100px" /></div>');
});
我使用下面的快照添加了动态内容
var obj = {"Test Tube": "test.png","Beater": "beat.png"};
$.each( obj, function( key, value ) {
$(".instruments").append('<div class="tile bg-gray">'
+'<div class="tile-content image">'
+'<img src="'+value+'">'
+'</div>'
+'<div class="brand">'
+'<span class="label fg-white">'+key+'</span>'
+'</div>'
+'</div>');
});
$(".tile").click(function(){
var imgSelected = $(this).find("img").attr("src");
$(".working-area").append('<div id="draggable" class="ui-widget-content" style="border:solid 1px;"><img src="'+imgSelected+'" width="100px" height="100px" /></div>');
});
现在我需要将新添加的#draggable div 设为可拖动元素。为此,我有如下代码
$(function() {
$( "#draggable" ).draggable();
});
但它适用于静态元素不适用于动态添加的 divs,如 id #draggable
我有 link 这些外部 js 和 css
<link href="http://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css" rel="stylesheet">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
我不知道为什么这对动态 divs
是错误的问题是,
$(function() {
$( "#draggable" ).draggable();
});
等同于 $( document ).ready()
。因此,当调用此方法时.. 只有那些当时存在的元素将被初始化为 draggable
behavior.And 其他动态元素将没有此初始化。
因此,添加这些动态元素后,您必须重新初始化 draggable
,
$(".tile").click(function(){
var imgSelected = $(this).find("img").attr("src");
$(".working-area").append('<div id="draggable" class="ui-widget-content" style="border:solid 1px;"><img src="'+imgSelected+'" width="100px" height="100px" /></div>');
$( "#draggable" ).draggable();
});
另外,我建议您使用 class 选择器而不是 id 选择器来初始化 draggable
.
查看此代码块,id
参数似乎在 DOM 中重复,这不是好的做法。 id
是唯一的,这将导致只有一个元素是 draggable
.
$(".tile").click(function(){
var imgSelected = $(this).find("img").attr("src");
//FIXME : Chance of Duplicate id
$(".working-area").append('<div id="draggable" class="ui-widget-content" style="border:solid 1px;"><img src="'+imgSelected+'" width="100px" height="100px" /></div>');
});