2011-09-16 9 views
8

मुझे कुछ HTML तत्वों के साथ एक वेबपृष्ठ मिला जिसमें टेक्स्टटेरा और एम्बेडेड कंटेंटेबल इफ्रेम (आरटीई) शामिल है।खींचना: डेटा का प्रतिस्थापन

जब मुख्य पेज 'my_data' पर एक पाठ क्षेत्र में छोड़ने, मुख्य पृष्ठ पर draggesture घटना को पकड़ने और पाठ/html-डेटा

jQuery(document).bind('draggesture', function(event){     
    event.originalEvent.dataTransfer.setData('text/html', 'my_data'); 
}); 

अब स्थापित करने के लिए इस कोड को मैं प्रबंधन का उपयोग करते हुए गिरा दिया जाता है। संतोषजनक iframe में ड्रॉप 'my_data' भी छोड़ देता है।

1. iframes दस्तावेज़ काम करता है के लिए हैंडलर इस तरह की बाइंडिंग:

लेकिन मैं कि मुझे समझ नहीं आता यहां तीन मुद्दों मिल गया। मैंने उपरोक्त कोड में इवेंट डेटा एनालॉग सेट किया है, लेकिन यह काम नहीं करता है। जब मैं इसे मुख्य पृष्ठ 'if_data' पर iframe या textarea के अंदर खींचता हूं, लेकिन मूल चयनित सामग्री नहीं डाली जाती है। 'my_data' सेट करने के लिए मैं क्या कर सकता हूं?

2. मैं संशोधित करने का प्रयास/iframe में ड्रॉप घटना और मुख्य पेज का उपयोग कर डेटा सेट:

jQuery(ed.getDoc()).bind('drop', function(event){ 
    event.originalEvent.dataTransfer.setData('text/html', 'my_data'); 
}); 

लेकिन मैं दोनों दस्तावेजों (मुख्य पृष्ठ और iframe पर एक जावास्क्रिप्ट त्रुटि मिलती है): "इस दस्तावेज़ के लिए संशोधनों की अनुमति नहीं है"। मुझे यह त्रुटि क्यों मिलती है? क्या इसके आसपास कोई कार्य है? ऐसा लगता है कि pimvdb को इसके लिए एक स्पष्टीकरण मिला है।

3. जब मुख्य पृष्ठ से <p>some text</p><hr><p>some text</p> का चयन करके और contenteditable आइफ्रेम कुछ भी नहीं में इस खींच डाला जाता है जब मैं 'my_data' (Draggesture पर) सेट से पहले कोड उदाहरण का उपयोग। Textarea कार्यों में खींच रहा है। क्या किसी को पता है कि यहां क्या गलत हो रहा है? (समस्या क्रोम का उपयोग कर होती है नहीं!)

संपादित करें: यहाँ के आसपास खेलते हैं और समस्या को समझने के लिए एक jsFiddle डेमो है:

http://jsfiddle.net/R2rHn/5/

+1

आप एक jsFiddle डेमो कर सकते हैं? –

+0

मेरी संपादित पोस्ट देखें - मैंने एक jsFiddle डेमो – Thariama

उत्तर

2

आप draggesture लेकिन dragstart काम करता है का उपयोग कर रहे हैं।

दूसरा, dataTransfer डेटा drop पर सेट करने का अर्थ नहीं है, क्योंकि ड्रैग "पैकेज" पहले से ही पहुंच चुका है। ड्रॉप के बाद इसे नष्ट किया जा रहा है, तो आप उस बिंदु पर इसे क्यों बदलना चाहेंगे?

मैंने इसे हल करने में सक्षम होने के लिए जो कुछ भी हो रहा था, उसे पाने के लिए अपनी पहेली साफ कर दी, और यह नतीजा है। ऐसा लगता है कि क्रोम पर काम करता है।

http://jsfiddle.net/R2rHn/7/

tinyMCE.init({ 
    mode : "exact", 
    elements : "content", 
    skin : "o2k7", 
    skin_variant : "silver", 

    setup : function(ed) { 
    ed.onInit.add(function(ed, evt) { 
     var iframe = ed.getDoc(); 

     jQuery(iframe).bind('dragstart', function(event){ 
     event.originalEvent 
       .dataTransfer 
       .setData('text/plain', 'modified_content_from_iframe'); 
     }); 
    }); 
    }, 

}); 

jQuery(document).bind('dragstart', function(event){   event.originalEvent 
     .dataTransfer 
     .setData('text/html', 'my_data_html'); 

    event.originalEvent 
     .dataTransfer 
     .setData('text/plain', 'my_data_plain'); 
}); 
+0

+1 क्रोम में ठीक काम करता है, लेकिन फ़ायरफ़ॉक्स में नहीं। मुझे फ़ायरफ़ॉक्स समाधान की आवश्यकता है क्योंकि हमारा ग्राहक फ़ायरफ़ॉक्स का उपयोग कर रहा है। दुर्भाग्यवश टेक्स्टटेरा में कंटेंटएडेबल आईफ्रेम से खींचते समय ड्रैग डेटा को संशोधित करना FF5 और FF6 का उपयोग करके काम नहीं करता है। एफएफ का उपयोग करना व्यवहार अभी भी वही है। – Thariama

+0

@ थारीमा: मुझे फ़ायरफ़ॉक्स के बारे में निश्चित नहीं है। शायद फ़ायरफ़ॉक्स में पूर्ण समर्थन और कुछ कीड़े नहीं हैं। खींचें और ड्रॉप एचटीएमएल 5 है, इसलिए यह अभी तक पूरी तरह से काम नहीं कर रहा है। – pimvdb

+0

हो सकता है कि, मैं एक कामकाजी कामकाज के साथ रह सकता हूं – Thariama

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