Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Pominięcie spacji przy zaznaczaniu dwuklikiem w Chrome
Forum PHP.pl > Forum > Przedszkole
Print_Screen
Jeśli zrobię dwuklik nad słowem z pola tekstowego w Operze, to zaznaczy się dane słowo. Natomiast w Chrome zaznaczenie obejmie także wstępującą po wyrazie spację (o ile taka tam stoi).

Chciałbym, żeby w Chrome, tak jak w Operze, zaznaczało się samo słowo - bez spacji.

Da się wymusić takie zachowanie javascriptem?
konrados
No możesz próbować przejąc dwuklik, aczkolwiek a takiej operze to raczej nie zadziała (to dziwna przeglądarka jest).
A druga sprawa - po co? Jeśli chodzi Ci o o to, by później przetwarzać jakoś zaznaczony tekst, to zrób trim.
Mephistofeles
To chyba jakiś bug, czasami się zaznacza ze spacją, a czasami bez (ten sam wyraz).
kamil4u
Aż mnie zaciekawiło, więc zrobiłem gotowca smile.gif :

[JAVASCRIPT] pobierz, plaintext
  1. <b>Taki test, tylko zamiast spacji literka "a"</b><br><br>
  2. <textarea id="test" style="width: 400px;"> kamil ala robert ania </textarea>
  3.  
  4. <script>
  5. document.getElementById('test').ondblclick = function(){
  6. var l; //dlugosc
  7. if( this.setSelectionRange ){ //nie IE - czyli między innymi Chrome
  8. l = this.selectionEnd - this.selectionStart; // dlugosc
  9. if( this.value[this.selectionEnd-1] == 'a' ) l--; // jezeli literka 'a' jest ostatnia zaznaczona
  10. alert( this.value.substr(this.selectionStart, l) ); // sprawdzenie czy wszystko w porządku
  11. }
  12. };
  13. </script>
[JAVASCRIPT] pobierz, plaintext


A tu wersja, która nie pozwala zaznaczyć ostatniej literki - znaczy zaznacza i zaraz odznacza:
[JAVASCRIPT] pobierz, plaintext
  1. <b>Taki test, tylko zamiast spacji literka "a"</b><br><br>
  2. <textarea id="test" style="width: 400px;"> kamil ala robert ania </textarea>
  3.  
  4. <script>
  5. document.getElementById('test').ondblclick = function(){
  6. if( this.setSelectionRange ){
  7. if( this.value[this.selectionEnd-1] == 'a' )
  8. this.selectionEnd = this.selectionEnd-1; //zmiana zaznaczenia, jeżeli ostatnia "a"
  9. }
  10. };
  11. </script>
[JAVASCRIPT] pobierz, plaintext


Testowane tylko pod FF
AdIoS_Neo
Witam,
faktycznie interesujący temat, pozwoliłem sobie sprawdzić na chromie drugi skrypt @kamil4u i wyszło, że jeśli chce się sprawdzić ostatnią literę zaznaczonego dwuklikiem słowa, a za słowem jest spacja którą też przeglądarka zaznaczyła to należy zrobić to w ten sposób:
[JAVASCRIPT] pobierz, plaintext
  1. this.value[this.selectionEnd-2]
[JAVASCRIPT] pobierz, plaintext
ponieważ
[JAVASCRIPT] pobierz, plaintext
  1. this.value[this.selectionEnd-1]
[JAVASCRIPT] pobierz, plaintext
zwraca ostatni zaznaczony znak, a nie jak mogłoby się wydawać drugi od końca. Tak więc by skrypt działał poprawnie należy zapisać go w ten sposób:
[JAVASCRIPT] pobierz, plaintext
  1. document.getElementById('test').ondblclick = function(){
  2. if(this.setSelectionRange){
  3. console.log(this.value[this.selectionEnd] + " / " + this.value[this.selectionEnd-1]); // ukazanie w konsoli przegladarki co sie kryje pod tymi wartościami
  4. if(this.value[this.selectionEnd-1]=='a' || (this.value[this.selectionEnd-1]==' ' && this.value[this.selectionEnd-2]=='a'))
  5. this.selectionEnd = this.selectionEnd-1; //zmiana zaznaczenia, jeżeli ostatnia "a"
  6. }
  7. };
[JAVASCRIPT] pobierz, plaintext
!*!
Cytat
aczkolwiek a takiej operze to raczej nie zadziała (to dziwna przeglądarka jest).

<mowagumbusowa>Chyba dla Ciebie</mowagumbusowa>

A tak z czystej ciekawości, to po co Ci to? Do ładniejszej edycji tekstu? Użytkownicy Chrome i tak nie zwrócą uwagi. I co ze skrótem shift+ctrl+strzałki?
kamil4u
@AdIoS_Neo: Oczywiście masz rację. Przeoczyłem to, bo testowałem pod FF. Ew. można po prostu wykryć czy przeglądarka to Chrome i jeśli tak dopiero wtedy uruchomić skrypt. I pewnie znalazłoby się jeszcze kilka wyjątków.


Akurat Opera moim zdaniem dobrze radzi sobie ze zdarzeniami i ogólnie JS. Trzyma się standardów i to, co ma działać według dokumentacji, z reguły działa. Nawet tak na szybko nie umiem wymienić z czym ma ta przeglądarka problemy. Generalnie każda współczesna przeglądarka z JS już nie ma problemów i coraz rzadziej biblioteki JS są potrzebne( biblioteki, które niwelują różnicę w przeglądarkach ). Nawet najnowsze IE trzyma poziom, więc wszystko idzie w bardzo dobrym kierunku.
Print_Screen
Moja prośba była związana z tym tematem. Jeśli dwuklik obejmie spację występującą po danym słowie do otagowania, to powstanie coś takiego:

<tag>słowo </tag>

zamiast

<tag>słowo</tag>

Nie wiem czemu pojawił się tu wątek Opery, jako złej lub dziwnej. Przecież w poście tytułowym napisałem, że w Operze jest dobrze i ją podaję jako wzór. Problem był w Chrome. Skrypt kamil4u go rozwiązuje. Wersja AdIoS_Neo działa u mnie identycznie. Oczywiście obie przerobiłem, żeby reagowały na spację, a nie literkę "a". Jest tylko ten moment mignięcia zaznaczenia, ale wydaje się, że tak musi być. Dzięki za pomoc!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.