login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Get selection in Google Chrome (Opgelost)

Offline Bart - 07/05/2009 19:38 (laatste wijziging 07/05/2009 19:43)
Avatar van BartPHP expert Oke here we go, toch maar eens tijd om bezig te gaan met JavaScript. Gedacht aan de nadelen? Ja, alleen niet dat ze zo gecompliceerd zouden zijn. Genaamd: browser compatibiliteit.

Iedereen weet dat Chrome gebruik maakt van de V8 JS Engine, nu probeer ik m.b.v. onderstaande code, een BB insert te maken op een textarea met de naam "bericht" en id "bericht".
  1. function addTags(Tag, fTag)
  2. {
  3. var obj = document.nieuws.bericht;
  4. obj.focus();
  5.  
  6. if (document.selection && document.selection.createRange) // Internet Explorer
  7. {
  8. sel = document.selection.createRange();
  9. if (sel.parentElement() == obj) sel.text = Tag + sel.text + fTag;
  10. }
  11.  
  12. else if (obj != "undefined") // Firefox
  13. {
  14. var longueur = parseInt(obj.textLength);
  15. var selStart = obj.selectionStart;
  16. var selEnd = obj.selectionEnd;
  17.  
  18. obj.value = obj.value.substring(0,selStart) + Tag + obj.value.substring(selStart,selEnd) + fTag + obj.value.substring(selEnd,longueur);
  19. }
  20.  
  21. else obj.value += Tag + fTag;
  22.  
  23. obj.focus();
  24. }

Het heeft iets te maken met document.selection, alleen kan ik maar niet in me kop krijgen waarom dit wel in IE werkt (overigens met een omweg ook in FF) maar niet in Chrome. (Ongetwijfelt is V8 JS Engine de schuldige).
Hoe kan ik dit alsnog in Chrome werkend krijgen?

Wat moet de code doen:
Volgende wordt in een textarea getypt:
"Hallo deze tekst moet bold."
Achteraf selecteer je "bold", en klik je een item aan (m.b.v. onClick voert ie de addTags uit. Die plant [.b] en [./b] om de geselecteerde tekst. Dus dan krijg je:
"Hallo deze tekst moet [.b]bold[./b]."

Wat doet de code nu:
Als ik volgens bovenstaande te werk ga in Chrome, krijg ik als resultaat in de textarea:
"Hallo deze tekst moet [.b]bold[./b]bold."

NOTE: [.b] en [./b] zijn natuurlijk zonder punt.

Edit:
Om een tag toe te voegen gebruik ik:
  1. <img src="../../img/bold.png" onClick="addTags('[b]', '[/b]');">


Textarea:
  1. <textarea name="bericht" style="width: 600px; height: 300px;" id="bericht"><? if(isset($_POST['bericht'])) echo $_POST['bericht']; ?></textarea>

3 antwoorden

Gesponsorde links
Offline urqbz - 07/05/2009 21:43
Avatar van urqbz PHP interesse Het is toch o dat je pas wat van het effect van die tags merkt nadat je op de post/verzenden knop hebt gedrukt en de betreffende tag geprocessed is (a la sitemasters hier?) Ik denk dat wat jij wilt namelijk helemaal niet kan.

*correct me if i'm wrong *
Offline Bart - 07/05/2009 21:49
Avatar van Bart PHP expert Eh ik denk niet dat je het helemaal snapt, wat ik bedoel is dat bovenstaande prima werkt in IE en FF, maar in Chrome de mist ingaat. In Chrome plakt ie 2x de geselecteerde tekst in de textarea met 1x BBCodes eromheen en de andere niet.
Offline Bart - 08/05/2009 11:47
Avatar van Bart PHP expert Problem solved by Ontani 
document.getElementByID('textfield') gebruiken i.p.v. document.selection.createRange()
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.167s