2011-06-25 18 views
7
में फायरिंग नहीं ondragover ड्रॉप

मैं इस सरल उदाहरण यहाँ जो मुझे http://jsfiddle.net/G9mJw/ एक बहुत ही सरल कोड पर होते हैं, जिसके लिए क्रोम 11 में फायरिंग नहीं है:एचटीएमएल 5 खींचें और क्रोम

var dropzone = document.getElementById('dropzone'), 
    draggable = document.getElementById('draggable'); 


function onDragOver(event) { 
    var counter = document.getElementById('counter'); 
    counter.innerText = parseInt(counter.innerText, 10) + 1; 
} 


dropzone.addEventListener('dragover', onDragOver, false); 

यह सफारी में ठीक से काम करने लगता है था ... लेकिन क्रोम में dragover घटना को तब नहीं कहा जा रहा है जब लाल वर्ग बिंदीदार स्पर्श करता है।

मैंने कुछ उदाहरणों को दोहराने की कोशिश की है जो वर्तमान में क्रोम में काम कर रहे हैं लेकिन यह मेरे लिए भी काम नहीं करता है।

मैंने काम करने पर डिफ़ॉल्ट व्यवहार को रोकने की कोशिश की है, लेकिन ऐसा नहीं हुआ। किसी भी मदद को बहुत सराहा जाएगा।

धन्यवाद

+0

यह क्रोम 12 में मेरे लिए काम करता (नवीनतम जारी)। शायद 11 ने इसका समर्थन नहीं किया है? – Halcyon

+0

अजीब, मैंने अभी 12.0.742.100 के साथ प्रयास किया है और यह अभी भी काम नहीं कर रहा है ... काउंटर प्रत्येक घटना के लिए 1 नहीं जोड़ता है ... जिसका मतलब है कि निकाल दिया नहीं जा रहा है। इसके अलावा यह भी weirder है क्योंकि http://html5demos.com/drag बिना किसी समस्या के काम करता है 11. – zanona

उत्तर

11

ऐसा लगता है कि यह dropzone पर लागू किया जाना करने के लिए dragover घटना के लिए dragstart घटना पर खींचे जाने योग्य तत्व करने के लिए कुछ डेटा सेट करने की जरूरत है।

मैंने स्निपेट http://jsfiddle.net/G9mJw/20/ अपडेट किया है जो अब क्रोम में भी काम करता है।

और नए कोड इस प्रकार है:

var dropzone = document.getElementById('dropzone'), 
    draggable = document.getElementById('draggable'); 


function onDragStart(event) { 
    event.dataTransfer.setData('text/html', null); //cannot be empty string 
} 

function onDragOver(event) { 
    var counter = document.getElementById('counter'); 
    counter.innerText = parseInt(counter.innerText, 10) + 1; 
} 

draggable.addEventListener('dragstart', onDragStart, false); 
dropzone.addEventListener('dragover', onDragOver, false); 

इसके अलावा यह कैसे में काम करता है के बारे में कुछ और जानकारी नहीं है:

जब एक खींचें होती है, तो डेटा करना होगा: https://developer.mozilla.org/En/DragDrop/Drag_Operations#Drag_Data और इस तरह उल्लेख बातें ड्रैग से जुड़े रहें जो पहचानता है कि क्या खींचा जा रहा है।

जो समझने में आसान बनाता है ... मैं सिर्फ यह समझने की कोशिश कर रहा हूं कि यह कुछ डेटा भेजने की आवश्यकता के बिना सफारी में कैसे काम करता है? या शायद यह पहले से ही कुछ सामग्री डिफ़ॉल्ट रूप से भेजता है?

event.dataTransfer.setData('text/html', null); विधि, उत्सुकता से event.dataTransfer.setData('text/html', ''); जैसी खाली स्ट्रिंग नहीं भेज सकती अन्यथा dragover ईवेंट प्रेषित नहीं किया जाएगा।

+2

एक दिलचस्प परिशिष्ट, यदि आप jQuery का उपयोग करते हैं, तो कम से कम, ऐसा लगता है कि ईवेंट ऑब्जेक्ट मेरे ड्रैग में पास हो गया फ़ंक्शंस में डेटा ट्रांसफर ऑब्जेक्ट नहीं होता है। मुझे '$ ('। Foo') से स्विच करना होगा। लाइव ('ड्रैगस्टार्ट', ...) 'to' elem.addEventListener (' dragstart ', ...)' मेरी घटनाओं को सही तरीके से काम करने के लिए – Endophage

+2

क्या होगा ड्रैगिंग ऑब्जेक्ट आपके ब्राउज़र से भी नहीं है? (यानी: इसके बजाय किसी अन्य ब्राउज़र से?) – ericslaw

+1

@ एन्डोफेज यदि आप jQuery का उपयोग कर रहे हैं, तो आप वास्तव में 'jQuery.event.props.push ("dataTransfer") का उपयोग कर ईवेंट ऑब्जेक्ट में डेटा ट्रांसफर ऑब्जेक्ट जोड़ सकते हैं;' (देखें "अन्य गुण "http://api.jquery.com/category/events/event-object/) – Ben

4

क्रोम वर्तमान में केवल कुछ डेटा प्रकारों का समर्थन करता है - यदि आपके डेटा में एक मान्यता प्राप्त एमआईएम प्रकार नहीं है तो ड्रैग/ड्रॉप बस आगे नहीं बढ़ता है। यह डब्ल्यू 3 सी स्पेक का उल्लंघन करने में बहुत स्पष्ट रूप से है, और फ़ायरफ़ॉक्स में कोई समस्या नहीं है (जब तक आप कुछ डेटा प्रदान करते हैं) या यहां तक ​​कि सफारी (जो खींचने की अनुमति देता है कि डेटा सेट है या नहीं)।

क्रोमियम के बग रिपोर्ट यहाँ है: http://code.google.com/p/chromium/issues/detail?id=93514

+0

"टेक्स्ट/एचटीएमएल" ठीक होना चाहिए, नहीं? यह मेरे साथ काम नहीं कर रहा है, या तो। Zanona द्वारा जवाब देने के लिए मेरी टिप्पणी देखें। – molecular

+0

वे इसे ठीक कर चुके हैं, अगर मैं उस टिकट से जुड़े JSFiddle को संपादित करता हूं (http://jsfiddle.net/pimvdb/HU6Mk/10/) और इसे फिर से चलाएं, तो क्रोम "टेक्स्ट/एचटीएमएल" को खींचने की अनुमति देता है और अन्य सामग्री-प्रकार अब। – natevw

0

मैं माइम प्रकार में समस्या आई। http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop2

उनकी कोड नमूना मेरे लिए काम नहीं करेगा जब तक मैं "पाठ" के बजाय GetData और setData करने के लिए "text/html" परिवर्तित किया गया:

W3Schools एक पृष्ठ आप प्रयोग कर सकते हैं के साथ है।

मैं उपयोग कर रहा हूँ: संस्करण 34.0.1847.116 Ubuntu 14.04 आभा (260972)

संबंधित मुद्दे