2010-06-10 25 views
6

Temel olarak iki tablo var: Şirketler ve ziyaretçiler. Şu anda ziyaretçileri şirketlere sürüklemek mümkün. Harika çalışıyor. Bırak işlevi gerçekleşir gerçekleşmez, iki $ .post vardır. İlki, sürükle veritabanına kaydeder. İkincisi, ziyaretçileri günceller çünkü bilgiler sürekli olarak değişir.jQuery canlı sürüklenebilir/canlı olarak düşülebilir?

d(this).data("draggable") is null 

jQuery UI dosyasında oluşur: Sorun, ancak ikinci $ .post bitirir en kısa sürede, Kundakçı aşağıdaki hatayı sürekli gündemde olan olmasıdır. On line 56.

yaklaşık 400 kez. Yani temelde sürüklenebilir ve bırakılabilir ile live() yapmak için bir yol arıyorum.

.draggables #visitors (bir ul) 'dir. Bırakılabilir eşyalar # birleşiktir (bir tablo).

Teşekkürler!

$(".draggable").draggable({ 
    revert:true 
}); 
$(".droppable").droppable({ 
    drop: function(ev, ui) { 
     $(this).text($(ui.draggable).text()); 

     $.post('planning/save_visit', {user_id: $(ui.draggable).attr('id'), company_id: $(this).attr('id'), period: $('ul.periods li.active').attr('id')}); 

     $.post('planning/' + $('ul.periods li.active').attr('id'), {visitors:true}, function(data){ 
      $('#visitors').html(data); 
     }); 
    }, 
    hoverClass: 'drophover' 
}); 

cevap

9

Eğer sürüklenebilir öğelerini $('#visitors').html(data); yaptığımız tümdeğiştiriyorsanız ziyaretçileri yeniden zaman - yani silinmiş ve sürüklenebilir olmayan yeni unsurlarla değiştirilir önce sürüklenebilir vardı o. (Ben çünkü .live() söz nedeniyle, bu fark eminim, bu nedenle bu şeyiyle sadece burada gerçekten) Eğer tam ziyaretçi elemanları değiştirileceği zaman biliyorum, bu yüzden yerine alternatif için, Ancak

.live() neden değişiklikten hemen sonra sürüklenebilir etki için başka bir istekte bulunmuyor. Eski sürükleyicileri değiştirmeden önce "yok etmek" daha güvenli olabilir, ancak kesinlikle gerekli olup olmadığından emin değilim.

$.post('planning/' + $('ul.periods li.active').attr('id'), {visitors:true}, function(data){  
    $(".draggable").draggable("destroy"); 
    $('#visitors').html(data); 
    $(".draggable").draggable({ revert:true }); 
}); 
+0

Çok teşekkürler! Bu harika çalıştı! – Henk

7

1) oluştur x elemanları

<div class='dropzone'></div> 
<div class='droppableItem'></div> 

2) tüm Dropzones

$(".dropzone").liveDroppable({ hoverClass:'drophover', accept:'.droppableItem' }); 

3) liveDroppable özel işlev

(function ($) { 
    $.fn.liveDroppable = function (opts) { 
     this.live("mouseenter", function() { 
     if (!$(this).data("init")) { 
      $(this).data("init", true).droppable(opts); 
     } 
     }); 
     return $(); 
    }; 
}(jQuery)); 

4 tanımla) Her ne zaman sizi hiç İşleyici'yi ekleyin programlı olarak yeni bir dropzone ekleyin, Sadece çağrı ..

$(".dropzone").mouseenter(); 


Sonuç: Programlama yoluyla eklenmiş veya 'canlı' dropzones droppable yapılacaktır.

İlgili konular