2012-07-12 8 views
5

मेरे पास HTML के भीतर contenteditable तत्वों के लिए एक अजीब मामला है। हमारे पास एक समृद्ध टेक्स्ट एडिटर है जो ग्राहक पूर्व-निर्मित टेम्पलेट्स (हमारे द्वारा) लोड करते हैं, और फिर उस टेम्पलेट को संशोधित कर सकते हैं हालांकि वे (ज्यादातर) चाहते हैं।नेस्टेड गैर-संपादन योग्य टैग के साथ न्यूलाइन और संतुष्ट

हमारे टेम्पलेट्स के हिस्सों को सीधे संपादन योग्य नहीं होने के लिए चिह्नित किया गया है, लेकिन अभी भी हटाया जा सकता है, हालांकि, ऐसा लगता है कि ऐसा कोई तत्व एक पंक्ति पर पहला तत्व है (सीधे <br/> टैग के बाद), और उपयोगकर्ता उपरोक्त रेखा पर DEL हिट करता है। क्योंकि इसकी contenteditable=false है, इसलिए ब्राउज़र <br/> पर नहीं हटाता है लेकिन पूरे गैर-संपादन योग्य अवधि को हटाता है। उपयोगकर्ता blah blah blah के बाद उनके कर्सर डालता है

नमूना HTML इस

<div contenteditable=true> 
    <span>blah blah blah</span><br/> 
    <span contenteditable="false">You cant edit this value directly</span> 
</div> 

तरह है, और DEL पूरे अगले सामग्री संपादन योग्य हटा दी जाती है मारता है, बल्कि लाइन ब्रेक से।

क्या इस व्यवहार को ठीक करने के लिए कोई तरीका, जावास्क्रिप्ट या अन्यथा है?

Ive कर्सर की स्थिति (रंगीन का उपयोग करके) का पता लगाने और अस्थायी रिक्त स्थान डालने का प्रयास करने के साथ चारों ओर बेवकूफ़ बना दिया, लेकिन मुझे लगता है कि यह वांछित व्यवहार नहीं है, जो कि गैर-संपादन योग्य टैग लाया जाता है पिछली लाइन तक।

हमने केवल संपादक को क्रोम में उपयोग सीमित कर दिया है, इसलिए आईई या एफएफ के बारे में चिंता करने की आवश्यकता नहीं है।

jsfiddle of an example

+0

आपके टेम्पलेट का हिस्सा '
'है? यदि ऐसा है तो आप '
' का उपयोग करने के बजाय 3 'div' का उपयोग नहीं कर सकते? –

+0

हां। कारणों से मैं पूरी तरह से सुनिश्चित नहीं हूं (शायद प्रतिपादन के लिए), हमने ब्राउजर को सम्मिलित करने की बजाय लाइन ब्रेक डालने के लिए एंटर कीप्रेस को ओवरराइड कर दिया है, इस मामले में, divs। –

+0

डिलीट की प्रमुख घटनाओं पर पूरा नियंत्रण लेने का एक और समाधान हो सकता है। आवश्यकता होने पर आप विरासत में कार्यक्षमता का उपयोग कर सकते हैं और वांछनीय नहीं होने पर ईवेंट को अवरुद्ध कर सकते हैं। या यहां तक ​​कि 100% कस्टम डिलीट तर्क का उपयोग करें। * संपादित करें: * कैरेट की स्थिति प्राप्त करने के लिए स्वीकार्य थोड़ा मुश्किल हो सकता है, लेकिन यह निश्चित रूप से संभव है। –

उत्तर

0

प्रत्येक अवधि contenteditable लें, फिर उपयोगकर्ता अवधि को हटाने के लिए आप संपादित नहीं करना चाहते, और संपादन किया जा रहा div से छुटकारा पाने के लिए सक्षम नहीं होंगे।

यहाँ JSFiddle की मेरी संस्करण है: http://jsfiddle.net/howderek/HgRsF/2/

+0

यह एक संभावित समाधान है, लेकिन हमें जो चाहिए वह फिट नहीं है, क्योंकि यह एक समृद्ध टेक्स्ट एडिटर के दायरे में है और div संपादन योग्य क्षेत्र का ब्लॉक है। Div के अंदर स्पैन एक निश्चित तरीके से पाठ को स्टाइल करने के लिए कई संचालन का परिणाम हैं। –

+0

ठीक है। क्या मैं पूछ सकता हूं कि आप एक क्षेत्र को संपादन से सुरक्षित क्यों रखना चाहते हैं, भले ही यह संपादन क्षेत्र के भीतर हो? – howderek

+1

यह शुरुआत से एक खराब डिजाइन निर्णय था, और दुर्भाग्य से उत्पाद इसके अटक गया है।वे विशेष स्पैन पुन: प्रयोज्य मूल्य हैं, जिनकी सामग्री अलग-अलग प्रबंधित की जाती है, और कई अलग-अलग दस्तावेज़ों में प्लग किया जा सकता है। वे सामग्री अनुभाग से अपरिहार्य हैं ताकि उपयोगकर्ताओं को उनकी पुन: प्रयोज्य प्रकृति का उपयोग करने के लिए मजबूर किया जा सके। वास्तविक समाधान यहां मैन्युअल रूप से एंटर/डिलीट कुंजी प्रेस को संभालने के लिए था, और हमारे पास इसका ठीक समाधान है, लेकिन अभी भी अपूर्ण –

0

प्रश्न 2012 से है, और उस समय के बाद से इस समस्या का समाधान होने और नेस्ट था contenteditable टैग लक्षित काम। अभी भी this bug जैसी कुछ समस्याएं हैं, लेकिन कुल मिलाकर सुविधा उपयोग योग्य होनी चाहिए।

+0

यह अभी भी मेरे ब्राउज़र पर ऊपर से जुड़े JSFiddle उदाहरण में दिखाई दे रहा है (क्रोम 40) – Chris

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