बस यहां पर झुकने के लिए, क्योंकि मैं इसे पिछले कुछ दिनों से भी कर रहा हूं। यदि आप jQuery के माध्यम से ड्रॉप इवेंट को बाध्य कर रहे हैं, तो मुझे समझने के लिए आपको jQuery द्वारा प्रदान की गई घटना में event.originalEvent
ऑब्जेक्ट से जाकर event.dataTransfer
ऑब्जेक्ट तक पहुंचने की आवश्यकता है।
उदाहरण:
इस मैं दोनों dragover
रूप में अच्छी तरह drop
के रूप में की घटनाओं के लिए बाध्य, के रूप में यह यह डिफ़ॉल्ट कार्रवाई प्रदर्शन रोकने के लिए जरूरी हो गया था में (में पाया गया कि यहां समाधान: Prevent the default action. Working only in chrome)
$('#dropzone').bind('dragover drop', function(event) {
event.stopPropagation();
event.preventDefault();
if (event.type == 'drop') {
console.log(event.originalEvent.dataTransfer.files);
}
});
यह भी एक बग प्रतीत होता है जहां console.log()
event.dataTransfer
(या event.originalEvent.dataTransfer
) यह फाइल सरणी खाली है, यह यहां बताया गया है: event.dataTransfer.files is empty when ondrop is fired?
बेहतर ऑप्स सवाल का जवाब करने के लिए (मैं सिर्फ यह के बाकी पर गौर किया और मैं जानता हूँ कि यह पुरानी है, लेकिन कुछ एक यह सहायक हो सकते हैं):
मेरे कार्यान्वयन jQuery में है, इसलिए मुझे आशा है कि ठीक है:
var files = [];
// Attaches to the dropzone to pickup the files dropped on it. In mine this is a div.
$("#dropzone").bind('dragover drop', function(event) {
// Stop default actions - if you don't it will open the files in the browser
event.stopPropagation();
event.preventDefault();
if (e.type == 'drop') {
files.push(event.originalEvent.dataTransfer.files);
}
});
// Attach this to a an input type file so it can grab files selected by the input
$("#file-input").bind('change', function(event) {
files.push(event.target.files);
});
// This is a link or button which when clicked will do the ajax request
// and upload the files
$("#upload-button").bind('click', function(event) {
// Stop the default actions
event.stopPropagation();
event.preventDefault();
if (files.length == 0) {
// Handle what you want to happen if no files were in the "queue" on clicking upload
return;
}
var formData = new FormData();
$.each(files, function(key, value) {
formData.append(key, value);
});
$.ajax({
url: 'upload-ajax',
type: 'POST',
data: formData,
cache: false,
dataType: 'json',
processData: false, // Don't process the files - I actually got this and the next from an SO post but I don't remember where
contentType: false, // Set content type to false as jQuery will tell the server its a query string request
success: function(data, textStatus, jqXHR) { /* Handle success */ },
error: function(jqXHR, textStatus, errorThrown) { /* Handle error */ }
});
});
तुम भी में dropzone फीका बनाने की तरह प्रभाव करने के लिए स्वीकार किए जाते हैं जवाब में अन्य घटनाओं के लिए बाध्य कर सकता है ताकि आप इसे देख सकते हैं (यह है कि मेरे पुस्तकालय के लिए मेरी कार्यसूची सूची में है)। हालांकि, मैं उपयोग किए जाने वाले वास्तविक AJAX फ़ाइल अपलोड का मूल है।
मेरे पास वास्तव में इसका परीक्षण करने का एक सुविधाजनक तरीका नहीं है, लेकिन यह संक्षेप में मैंने यह कैसे किया है (मैंने अनिवार्य रूप से उस पुस्तकालय से वह कोड लिया है जिसे मैं बना रहा हूं और इसे सामान्य कोड ब्लॉक पर अनुकूलित करने के लिए अनुकूलित किया गया है यहां समझने में आसान तरीका है)। उम्मीद है कि यह कुछ लोगों को मदद करता है। यहां से शुरू करना वास्तव में आगे बढ़ना और कतार से फ़ाइलों को हटाने की क्षमता के साथ फ़ाइल कतार सूची में जोड़ना वास्तव में आसान था, इसलिए यह एक बहुत अच्छा प्रारंभिक बिंदु होना चाहिए।
मुझे लगता है कि केवल HTML5 जो HTML5 का समर्थन करते हैं, आपको ऐसा करने की अनुमति दे सकते हैं। हालांकि मैं 100% निश्चित नहीं हूँ। – JesseBuesking
आप देशी जावास्क्रिप्ट का उपयोग करके ड्रैग-एन-ड्रॉप के साथ कुछ बहुत अच्छी चीजें कर सकते हैं, जैसे होस्टेड छवि (किसी वेबसाइट से) खींचना और उसे एक ड्रॉप पर ड्रॉप करना, जिसमें छवि ड्रॉप करना और फिर छवि बनाना और बनाना उस पथ के साथ एक छवि तत्व के स्रोत के रूप में। हालांकि, आपके डेस्कटॉप से एक छवि खींचना पूरी तरह से एक और चीज है और संभावित रूप से अवरुद्ध होने की संभावना अधिक होगी। –