मैं एक का उपयोग मामला है जहाँ मैं droppable के ड्रॉप विधि में कुछ तर्क को चलाने के लिए निर्धारित करने के लिए खींचने योग्य वापस लौटने चाहिए था।
$('.draggable-elements').draggable({
revert: function() {
if ($(this).hasClass('drag-revert')) {
$(this).removeClass('drag-revert');
return true;
}
}
});
$('.droppable-elements').droppable({
drop: function(event, ui) {
if (% conditional logic check here %) {
return $(ui.draggable).addClass('drag-revert');
}
}
});
मेरे उपयोग के मामले एक टेबल है जहां प्रत्येक कोशिका एक droppable एक 5 मिनट की अवधि का प्रतिनिधित्व करती हैं: मैं इस लक्ष्य को हासिल करने के लिए निम्न प्रयोग किया जाता है। मेरे ड्रैगगेबल्स बुकिंग हैं जो एक सेल में शुरू होती हैं, लेकिन बुकिंग समय का प्रतिनिधित्व करने के लिए एक पंक्ति में कई सेल्स पर चलती हैं।
मैं नहीं चाहता था कि कोई ड्रैगगेल ओवरलैप हो, क्योंकि यह एक डबल बुकिंग का प्रतिनिधित्व करेगा। तो, ड्रॉप के बाद मुझे पंक्ति में सभी ड्रैगगेबल्स मिलते हैं, जिसे मैंने अभी ले जाया है, और किसी भी ओवरलैप की जांच करें।यदि ओवरलैप है, तो मेरा सशर्त तर्क सत्य लौटाता है और मैं ड्रैगगेबल को वापस लाता हूं।
अगला चरण डेटाबेस को अद्यतन करने के लिए एक ajax कॉल आग, यदि सर्वर-साइड तर्क का कहना है इस कदम अमान्य है मैं एक त्रुटि स्थिति लौटाने और खींचने योग्य वापस लौटने की उम्मीद है है।
पीएस यह मेरा पहला जवाब है, क्षमा करें अगर मैंने कुछ भी गलत किया है। अच्छे उत्तरों को खुशी से स्वीकार करने के तरीके पर सुझाव।
संपादित करें: मेरी AJAX कॉल की कोशिश के बाद, मुझे एहसास हुआ कि यह बात है draggable.revert समारोह चलाता है से पहले करने के लिए droppable.drop समारोह के लिए अवसर की एक खिड़की है। जब तक मेरा AJAX कॉल झूठा लौटा, तब तक खिड़की पार हो गई थी और कक्षा को ड्रैगगेबल के लिए बहुत देर हो चुकी थी। प्रतिक्रिया करने के लिए प्रतिक्रिया दें।
इस तरह के रूप में, मैं नहीं रह गया है, draggable.revert समारोह पर भरोसा कर रहा हूँ, बजाय केवल AJAX प्रतिक्रिया पर और झूठे अगर अभिनय, चेतन() का उपयोग कर खींचने योग्य यह मूल स्थिति है पर लौटने के लिए इस प्रकार है:
$('.draggable-elements').draggable();
$('.droppable-elements').droppable({
drop: function(event, ui) {
var postData = {
id: 1,
...
};
$.post('/ajax/url', postData, function(response) {
var response = $.parseJSON(response);
if (response.status != 1) {
return ui.draggable.animate({left: 0, top: 0}, 500);
}
}
}
});
आप डेटा विशेषताओं के रूप में draggable.start/खींचें मूल छोड़ दिया और खींचने योग्य के शीर्ष मान जोड़ने की आवश्यकता हो सकती है, लेकिन मेरे लिए ऊपर ठीक काम किया।
+1 बड़ी मदद! धन्यवाद! – Sisir