2009-08-22 11 views
13

मेरे पास निम्नलिखित कोड संतोषजनक संपत्ति का प्रदर्शन करता है और एक बटन जो संतोषजनक क्षेत्र के साथ पैराग्राफ में बोल्ड टेक्स्ट इंजेक्ट करेगा। मेरा सवाल यह है कि बोल्ड पर क्लिक करने के बाद मैंने जहां छोड़ा था, उस पर फ़ोकस वापस कैसे करें, यदि आप कुछ टेक्स्ट हाइलाइट करते हैं, और बोल्ड क्लिक करते हैं, तो यह उन टेक्स्ट को बोल्ड करेगा, लेकिन फ़ोकस अब और नहीं होगा। वही बात होती है यदि आप कुछ भी नहीं चुनते हैं और बोल्ड पर क्लिक करते हैं, तो फोकस खत्म हो जाएगा और यदि आप फिर से छोड़े गए क्लिक करते हैं, तो आप बोल्ड ग्रंथ टाइप कर सकते हैं।execCommand के बाद संतुष्ट करने के लिए फोकस फोकस?

आपकी मदद के लिए बहुत बहुत धन्यवाद!

<head> 
    <style type="text/css"> 
    #container{ 
     width:500; 
    } 
    .handle{ 
     float:left; 
    } 
    </style> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script> 
    <script type="text/javascript"> 
    $(function(){ 
     $('#bold').click(function(){ 
      document.execCommand('bold', false, true); 
     }); 
    }); 
    </script> 
</head> 
<button id="bold">Bold</button> 
<div id="container"> 
<div class="c"><p contenteditable>Some text here asdf asdf asdf asdf asdf asd fasd fsa dfsa df asdf sadf sa dfa sdf sadf asd fsa df sadf asdf asdf asd fas df asdf as </p></div> 

<div class="c"><p contenteditable>Some text here asdf asdf asdf asdf asdf asd fasd fsa dfsa df asdf sadf sa dfa sdf sadf asd fsa df sadf asdf asdf asd fas df asdf as </p></div> 
</div> 

उत्तर

1

आप एक चर में क्लिक किया गया अंतिम आइटम स्टोर करने के लिए और फिर .focus फोन चाहते हो सकता है() उस पर के बाद .execCommand मार डाला गया है। कुछ इस तरह, मुझे लगता है:

$(function(){ 
     $('p.editable').click(function() { 
      var clickedItem = $(this); 
      clickedItem.attr('contenteditable', true).focus(); 
      $('#bold').click(function(){ 
        document.execCommand('bold', false, true); 
        clickedItem.focus(); 
      }); 
     }); 
    }); 

इस तरह आप भी मार्कअप से "contenteditable" विशेषता को दूर कर सकते हैं ...

HTH

+3

इस के '# bold' हर बार जब आप किसी अनुच्छेद क्लिक करें, हैंडलर में जिसके परिणामस्वरूप कई बार बाध्य किया जा रहा क्लिक करें घटना के लिए कार्रवाई के लिए बाध्य होगा। आप वह नहीं चाहते हैं। – Jake

+0

जोड़ा गया वर्ग '.editable', इसलिए यह केवल मार्कअप में निर्दिष्ट उस वर्ग के अनुच्छेद से जुड़ा हुआ है। – ALFABreezE

+0

हर बार जब आप एक p.editable पर क्लिक करते हैं तो एक हैंडलर # बोल्ड होगा। जब आप # बोल्ड पर क्लिक करते हैं तो इन सभी को निकाल दिया जाएगा जिसके परिणामस्वरूप execCommand कई बार चलाया जा रहा है और क्लिक किए गए सभी p.editables के आसपास कूदने पर ध्यान केंद्रित करें। उत्तर devongovett दिया इस समस्या से पीड़ित नहीं है क्योंकि # बोल्ड हैंडलर केवल एक बार बंधे हैं। – Jake

1

HTML:

<button onclick="doRichEditCommand('bold')" style="font-weight:bold;">B</button> 

जावास्क्रिप्ट:

function doRichEditCommand(aName, aArg){ 
    getIFrameDocument('editorWindow').execCommand(aName,false, aArg); 
    document.getElementById('editorWindow').contentWindow.focus() 
} 

देखें इस आप मदद कर सकते हैं:

https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla

4

तुम बस jQuery .focus() फ़ंक्शन का उपयोग कर सकते यह ध्यान दें। यह काम करना चाहिए:

var current; 
$(function(){ 
    $("p[contenteditable]").focus(function() { 
     current = this; 
    }); 

    $('#bold').click(function(){ 
      document.execCommand('bold', false, true); 
      $(current).focus(); 
    }); 
}); 

यह सिर्फ वर्तमान में संपादित क्षेत्र हर बार यह उपयोगकर्ता द्वारा ध्यान केंद्रित है का ट्रैक रखता है, और जब बोल्ड बटन क्लिक फोकस वापस उस क्षेत्र के लिए निर्धारित है।

8

आप .contents का उपयोग करना चाहिए()

var current; 
$(function(){ 
    $("p[contenteditable]").focus(function() { 
     current = this; 
    }); 

    $('#bold').click(function(){ 
      document.execCommand('bold', false, true); 
      $(current).contents().focus(); 
    }); 
}); 
+0

धन्यवाद, यह मदद करता है! –

+8

क्यों .contents() कॉल? – xec

+0

पता नहीं क्यों '.contents()' की आवश्यकता है, लेकिन यह काम करता है जबकि सीधे '.focus() 'को कॉल नहीं करता है। फुकिड, क्या आप समझा सकते हैं? – FeifanZ

0

आप एक iframe में कर रहे हैं, ध्यान केंद्रित() डिफ़ॉल्ट दृश्य पर कॉल करें।

myiframedocument.execCommand('Bold',false,null); 
myiframedocument.defaultView.focus(); 
संबंधित मुद्दे