Ответ 1
во время создания класть класс "draggable" или id в элементе. (вы не кладете класс), а затем код должен работать
$('.container').append($("<div class='bl pink draggable'></div>"));
$('.draggable').draggable()
Я пытаюсь понять, как сделать динамически созданные divs draggable, поэтому я создал эту очень простую вещь, чтобы помочь мне. Я понимаю, что я должен использовать событие on() с нединамическим обработчиком. Благодаря тому, что элемент body обрабатывает событие клонирования в связанном JSfiddle, мне удалось сделать динамически созданные divs клонируемыми, но они не перетаскиваются. Что я делаю не так?
Заранее спасибо за помощь!
$(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();
});
во время создания класть класс "draggable" или id в элементе. (вы не кладете класс), а затем код должен работать
$('.container').append($("<div class='bl pink draggable'></div>"));
$('.draggable').draggable()
Я бы сделал что-то вроде this
Я вызываю метод draggable
после добавления элементов в контейнер, например:
$("<div class='bl pink'></div>").appendTo('.container').draggable();
У меня была та же проблема. Принятый ответ, безусловно, работает, но я искал более чистое, более централизованное решение. Я не хотел, чтобы явным образом вызывал .draggable() каждое место, где мои script вставили новые элементы.
Я остановился на прослушивании вставок DOM на родительском элементе, а затем применил .draggable() для вставленных детей. Например:
$("#Parent").on("DOMNodeInserted", ".ChildClass", function() { $(this).draggable(); });
Ознакомьтесь с этой скриптой для демонстрации: http://jsfiddle.net/9hL7u95L/
Добавьте класс draggable к динамически добавленным элементам.
$(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();
});
Ive добавил некоторые бит к вашей игре, надеюсь, это поможет: http://jsfiddle.net/m3BXZ/8/
В основном Ive создал функцию, называемую startDrag, которая делает новые блоки перетаскиваемыми:
function startDrag(){
$(".bl").draggable();
}
Есть много способов сделать это, просто найдя, какое решение вам подходит.
использовать
$("<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();
});
Попробуйте это (пример):
$('.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);
});