![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 10.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam problem, który mnie przerósł. Używam funkcji BBCode. Kod function BBCode(name, before, after) { textarea = document.forms['form'].elements[name]; if ((typeof textarea.selectionStart) != 'undefined') { ss = textarea.selectionStart; se = textarea.selectionEnd; st = textarea.scrollTop; v1 = (textarea.value).substring(0, ss); v2 = (textarea.value).substring(ss, se); v3 = (textarea.value).substring(se, textarea.textLength); textarea.value = v1 + before + v2 + after + v3; if (!!window.opera) { textarea.selectionStart = (v1 + before + v2).length; } else { textarea.selectionEnd = (v1 + before + v2).length; } textarea.scrollTop = st; textarea.focus(); } else { if (document.selection) { str = document.selection.createRange().text; textarea.focus(); sel = document.selection.createRange(); sel.text = before + str + after; } else { textarea.value += before + after; } } } Funkcja ta jest dodana na początku dokumentu w tagu <head>, zajmuje się dodawaniem tagów BBCode do pola tekstowego. Kod <img class="bbcode" alt="message [b] [/b]" src="b.png" title="Pogrubienie" /> <img class="bbcode" alt="message [u] [/u]" src="u.png" title="Podkreślenie" /> <img class="bbcode" alt="message [i] [/i]" src="i.png" title="Kursywa" /> <textarea name="message" rows="3" cols="28"></textarea> Na samym końcu dokumentu dodaję funkcję sprawdzającą tagi "img" w celu znalezienia tych, które są odpowiedzialne za wstawienie BBCode'u. Kod <script type="text/javascript"> obrazek = document.getElementsByTagName('img'); for (i = 0; i < obrazek.length; i++) { if (obrazek[i].className=='bbcode') { names = obrazek[i].getAttribute('alt').split(' ') obrazek[i].onclick = function() {return BBCode(names[0], names[1], names[2]);} } } </script> Niby wszystko jest OK, ale gdy klikam by dodać pogrubienie wyskakuje mi kursywa, gdy klikam na podkreślenie, również wyskakuje mi kursywa, prawdopodobnie funkcja na końcu dokumentu przydzieliła parametry tylko raz, dla ostatniej klasy, czyli kursywy. Jest sposób, aby przydzielało dla każdego z osobna? Tzn. gdy kliknę na pogrubienie, chciałbym mieć pogrubienie, a nie kursywę, to samo dotyczy reszty tagów. Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 603 Pomógł: 131 Dołączył: 24.07.2007 Skąd: Górny Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Ciekawa sprawa. Też nie widzę błędu, ale jeśli używasz tego ostatniego kodu tylko dla: I,B,U. To to nieopłacalne, lepiej od razu dać to w onclick="BB....", a pozbyć się alta (tzn jego zawartości).
Zamieniłem kolejność <img> i wstawiany był zawsze ten który był ostatni. Jedyne wytłumaczenie jakie mi przychodzi na myśl jest takie: Uwaga: rozpatruję tylko img w ifie. Pierwszemu img zostaje przypisana funkcja (nazwijmy ją X() ) z odpowiednią zawartością. Drugiemu img zostaje przypisana ta sama funkcja co powyżej (X () ), ale z inną zawartością. => Poprzednia zawartość X() zostaje nadpisana. ... Na końcu każdy img ma przypisaną funkcję X(), która za każdym krokiem pętli została zmieniona i w efekcie zawiera alt z ostatniego imga. Ale kij wie ile prawdy w tej teorii. Poniżej rozwiązanie działające (zmieniłem tylko ostatni kod):
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 15:16 |