Avatar billede m-rachlitz Nybegynder
09. maj 2008 - 07:25 Der er 4 kommentarer og
1 løsning

Project BBcode (PHP&JS)

Hej eksperter!

Jeg har arbejdet lidt med at samle et simpelt bbcode system til min personlige blog, selve resultatet virker, altså når jeg henter data fra min database så omskriver mit script linjen "[f]test[/f]" helt korrekt og sætter "test" i fed.

Problemet ligger i at indsætte dataen i mit textarea når jeg skriver en besked.

Eksempel (her skriver jeg i mit textarea box):

"Hej"

jeg markerer så teksten "Hej" og trykker på min <input type="button" onclick="addbbcode('[f]', '[/f]')" value="F">.

Men intet sker. Der bliver ikke tilføjet "[f], [/f]" rundt om "Hej" i mit <textarea name="tekst">

Filer:
functions.php >>
<?
    $bb_codes = array(

    "[K]" => "<span style=\"font-style:italic;\">",
    "[/K]" => "</span>",
    "[k]" => "<span style=\"font-style:italic;\">",
    "[/k]" => "</span>", 
 
    "[F]" => "<span style=\"font-weight:bold;\">",
    "[/F]" => "</span>",
    "[f]" => "<span style=\"font-weight:bold;\">",
    "[/f]" => "</span>",
 
    "[LIST]" => "<div style=\"margin-left:20px;\"><li>",
    "[/LIST]" => "</li></div>",
    "
    " => "<div style=\"margin-left:20px;\"><li>",
        "
" => "</li></div>");
 
    function bbcodes($tekst) {
        $tekst = nl2br($tekst);
        $search = array_keys($GLOBALS["bb_codes"]);
        $tekst = str_replace($search, $GLOBALS["bb_codes"], $tekst);
        return $tekst;
    }
?>

functions.js >>
function addbbcode(startTekst, slutTekst) {
    var txtarea = document.forms['Textarea'].elements['tekst'];
    if (!txtarea) {
        alert('Feltet findes ikke');
    }
    else {
        if (document.selection) {
            txtarea.focus();
            var valgt = document.selection.createRange();
            valgt.text = startTekst+valgt.text+slutTekst;
        }
        else if (txtarea.selectionStart) {
            var start = txtarea.selectionStart;
            var slut = txtarea.selectionEnd;
            txtarea.value = txtarea.value.substring(0, start)+startTekst+txtarea.value.substring(start, slut)+slutTekst+txtarea.value.substring(slut, txtarea.value.length);
        }
        else {
            txtarea.value += txt;
        }
    }
}

test.php >>
<form name="Textarea" method="POST" enctype="multipart/form-data">
<input type="button" onclick="addbbcode('[f]', '[/f]')" value="F">
<input type="button" onclick="addbbcode('[k]', '[/k]')" value="K">
<input type="button" onclick="addbbcode('
    ', '
')" value="LIST">
<br>
<textarea name="tekst" class="cmsarea"><? echo $tekst; ?></textarea>
</form>


-- Jeg har sikret mig at alle filer bliver hentet i mit index.php, og jeg ved filerne bliver loadet i siden.


Problemet jeg skal have løst er som sagt den manglende indsættelse af [f], [/f] i mit textarea når jeg klikker på min input type=button.

MVH Michael.
Avatar billede roenving Novice
09. maj 2008 - 17:09 #1
Det er sikkert fordi .selectionStart i dine tests er 0, og så evaluerer testen til false, prøv i stedet:

<script type="text/javascript">
function addbbcode(startTekst, slutTekst) {
    var txtarea = document.forms['Textarea'].elements['tekst'];
    if (!txtarea) {
        alert('Feltet findes ikke');
    }
    else {
        if (document.selection) {
            txtarea.focus();
            var valgt = document.selection.createRange();
            valgt.text = startTekst+valgt.text+slutTekst;
        }
        else if (typeof txtarea.selectionStart == "number") {
            var start = txtarea.selectionStart;
            var slut = txtarea.selectionEnd;
            txtarea.value = txtarea.value.substring(0, start)+startTekst+txtarea.value.substring(start, slut)+slutTekst+txtarea.value.substring(slut, txtarea.value.length);
        }
        else {
            txtarea.value += startTekst + slutTekst;
        }
    }
}
</script>

-- der var også en fejl i det sidste alternativ !-)
Avatar billede roenving Novice
09. maj 2008 - 17:10 #2
-- i øvrigt er det ikke et heldigt valg, at du kalder din form det navn !-)
Avatar billede m-rachlitz Nybegynder
09. maj 2008 - 20:17 #3
Smid svar Roenving :-)

Hvad mener du med at det ikke er heldigt jeg har kaldt formen Textarea? ville det være bedre at kalde det fx. bbcode_blog ?
Avatar billede roenving Novice
10. maj 2008 - 09:50 #4
Undgå altid at bruge navne, der kan forveksles med elementer, eksempelvis findes der mange formularer rundt omkring, der hedder form, og muligheden for at forveksle det med den form-element-property, der formElement.form er nærliggende og kan afstedkomme de underligste fejl !-)

Velbekomme '-)
Avatar billede roenving Novice
11. maj 2008 - 23:04 #5
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester