2012-05-24 2 views
0

У меня есть Div контейнера и внутри пары DIV с классом демки и гравитации, какDiv создан из кода не загружает классы

<div id="container" style="position:relative;width=400px;height=400px;"> 
<div class="demo gravity" ></div> 
<div class="demo gravity"></div> 
<div class="demo gravity"></div> 
</div> 

и добавить новый DIV из кода как

var temp = $('<div/>'); 
    temp.attr('id', 'foo'); 
    temp.css({ 
     position : 'absolute', 
     top : '0px', 
     left : '0px', 
     width : '200px', 
     height : '40px' 
    }); 
    temp.addClass("gravity"); 
    temp.addClass("demo"); 
    $('#container').append(temp); 

в onReady функция у меня есть код, например

и он работает для divs внутри, но он не работает для div, Я добавил из кода. Div из кода показывает внутри div с id = "container", но не изменяет размер/перетаскивает/droppable. Кто-нибудь знает, в чем проблема?

+0

Вы после создания div запускаете '$ (. Demo) .resizable(). Draggable(). Droppable();' тоже? – antyrat

+1

'$ (. Demo)' недействителен, попробуйте '$ ('. Demo')' – TJHeuvel

+0

Не ваша проблема, а просто информация: вы можете объединить два класса вместе. 'temp.addClass (" gravity demo ")', и вы действительно должны использовать цепочку. – epascarello

ответ

2

Вот пример скрипки для вас, кажется, работает.

http://jsfiddle.net/ymutlu/cvZpX/2/

В случае удален скрипку,

var temp = $('<div>'); 
    temp.append("33"); 
    temp.attr('id', 'foo'); 
    temp.css({ 
     position : 'absolute', 
     top : '0px', 
     left : '0px', 
     width : '200px', 
     height : '40px' 
    });​ 
    temp.addClass("gravity"); 
    temp.addClass("demo"); 
    $('#container').append(temp); 

var demo = $(".demo"); 
demo.resizable().draggable().droppable();​ 

// отредактирован после Jamiec комментария вы можете использовать

temp.resizable().draggable().droppable();​ 

где вы добавить временные дивы.

+0

Это нормально, если вы добавляете все свои div в код * перед * вызовом resizable/draggable/droppable, но не удается, если какие-либо добавляются динамически после того, как страница будет загружена (т. Е. Добавлена ​​с помощью нажатия кнопки) – Jamiec

+0

You правильно, ваше решение работает нормально. temp.resizable(). draggable(). droppable(); также работает. – ymutlu

2

Вы должны сделать это для вновь созданного DIV тоже:

temp.resizable().draggable().droppable(); 
4

Проблема заключается в том, что вы добавляете новый DIV после призыв к resizable().draggable().droppable() на всех своих братьев и сестер.

Не могли бы вы не просто добавить это перед добавлением его (BTW вы можете собрать все эти звонки):

var temp = $('<div/>'); 
    temp.attr('id', 'foo') 
    .css({ 
     position : 'absolute', 
     top : '0px', 
     left : '0px', 
     width : '200px', 
     height : '40px' 
     }) 
    .addClass("gravity") 
    .addClass("demo") 
    .resizable().draggable().droppable(); 
$('#container').append(temp); 

Вот jsfiddle демонстрирующее, что вновь добавленные дивы делать на самом деле работы: http://jsfiddle.net/xqakj/