jQuery UI draggable is not working on newly created DOM element

烈酒焚心 提交于 2019-12-10 03:30:14

问题


I have some DOM element which is draggable using jQuery UI.All are working fine but when i create some element using jQuery , then they are not draggable at all. i.e

$('div.draggable').draggable(); //Existing element , it works :)
$('p.draggable').draggable() ; //Newly created paragraph with same class name, it doesnt work at all :(

Thanks in advance !!!

I am trying This :

<script type="text/javascript">
     $(document).ready(function(){
         $('body').append('<p class="draggable">Newly Created Paragraph</p>');
         $('p.draggable').draggable(); **//This is not working**
     });
</script>

However Somehow this is working

    <script type="text/javascript">
     $(document).ready(function(){
         $('body').append('<p class="draggable">Newly Created Paragraph</p>')
                 .find('p.draggable').draggable(); **This is working**

     });
</script>

回答1:


I know its been a while, but this problem recently bugged me too. As someone else mentioned, you got to rerun .draggable() on the newly created item, but that doesn't work if you defined certain options in your .draggable(). Also what didn't work was putting the $().draggable() in a function and then calling the function after creating a new element (this trick does however work with resetting droppables - go figure).

Anyway, long story short -> Putting the $().draggable() setup in a function and then calling the function after creating new element DID WORK, but i had to TAKE IT OUT of the document ready function..... after i disabled that, it worked.

You can call that function as many times and it keeps on working after every created element. It seems if it's in the document.ready statement then its a 1 shot deal..

Hope that helps.




回答2:


You need to call draggable() after the newly created element is inserted into the DOM.

The reason being, is that the first line of code is only matching existing elements. Newly created elements aren't selected in that first line.




回答3:


Actually it seems that there is problem with draggable. When you append some htmlTag and then try to find it and make it draggable, it do not recognise it. try to make a new element using createElement and then append it. Hope it works

var newEle = document.createElement('p');
$(newEle).attr("class","draggable").draggable();
$('body').append($(newEle));

or

var newEle = document.createElement('p');
$(newEle).attr("class","draggable");
$('body').append($(newEle));
$('p.draggable').draggable();



回答4:


i had this problem but after reading this i could solve it. so you have to call again draggable() method after building your new element, this is my code:

$(".in-browser").each(function(){
        $(this).dblclick(function(){
            var browseIn = $(this).data("href");
            var browserHTML = '<div class="browser draggable">\
        <ul class="browser-buttons">\
            <li>_   \
            <li>#   \
            <li>x   \
        </ul>\
        <div class="browser-win-container">\
        <div class="addressbar"></div>\
        <iframe class="opening-window" src="'+browseIn+'"></iframe>\
    </div>\
    </div>';
            $("body").append(browserHTML);
            $(".draggable").draggable(); //look at here
        });
    });



回答5:


You should call draggable() function everytime you call an event action:

$('body').on('click', '.add-new-table', function () {
 $( ".canvas" ).prepend('<div class="ui-widget-content draggable"><p>Drag me</p></div>');
 $(function(){
   $(".draggable" ).draggable({
     containment: "parent"  
   });
 });
});



回答6:


You have to apply draggable on the instance of the newly created object, Rewritten code:

<script type="text/javascript">
 $(document).ready(function(){
    var newElement = '<p class="draggable">Newly Created Paragraph</p>';
    $('body').append(newElement);
    newElement.draggable(); **//This is working**
 });

It should work now.




回答7:


You can use setTimeout to call draggable function after the new element has made.

$('div').click(function(){
 $('body').append('<div class="box"></div>');
 setTimeout(function() {
  $('div.box').draggable({
   drag: function( event, ui ) {},
   cursor:'-webkit-grabbing'
  });
 },1000);
})


来源:https://stackoverflow.com/questions/9799761/jquery-ui-draggable-is-not-working-on-newly-created-dom-element

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!