Avatar billede reffo Nybegynder
02. januar 2007 - 10:12 Der er 23 kommentarer og
1 løsning

Forum buttons

Hejhej...

Jeg har prøvet at sætte lidt knapper op til et textarea med javascript da de, der skal bruge textareaet ikke aner en pind om html og de alligevel skal kunne lave fed, kursiv og sæ videre.

Jeg er kommet op med denne kode der dur i FF men ikke i IE.

function insertcode(tag,id)
        {
        var textarea    = document.getElementById('post');

        var input        = document.getElementById(id);

        var test        = input.value.indexOf('/');
       
        if    (test == '-1')
            {
                slash         = '';
                newvalue    = '/' + id;
            }
        else
            {
                slash = '/';
                newvalue    = id;
            }

        var html        = '<' + slash + tag + '>';

        var text        = textarea.value;

        var newtext        = text + html;

        textarea.value    = newtext;

        input.value        = newvalue;

        textarea.focus();
        }

HTML koden

<input type='button' onclick="insertcode('strong', 'b');" value='b' id='b' title='Bold text' />

På forhånd tak
Avatar billede mclemens Nybegynder
02. januar 2007 - 10:20 #1
Måske kan denne leges med ?


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
<!--

function switchdis(tmpid){
tn=document.getElementById(tmpid);
tn.style.display=(tn.style.display=="none")?"block":"none";
}

window.onload=function(){
tn=document.getElementById("box1");
tn2=document.getElementById("button1");
tn.style.top=tn2.offsetTop+"px";
tn.style.left=tn2.offsetLeft+"px";
tn.style.width=tn2.offsetWidth+"px";
}


mytxt="";
mytxts="";
mytxte="";
mycurtxtl="";
myvalue="";
function findselect(mytag){
mytxtarea=document.formnavn.txtareanavn;

if(document.selection){
  mytxt=document.selection.createRange().text;
  if(mytxt!="")document.selection.createRange().text="["+mytag+"]"+mytxt+"[/"+mytag+"]";
}else if((mytxtarea.selectionEnd-mytxtarea.selectionStart)>0){
  mytxts=mytxtarea.selectionStart;
  mytxte=mytxtarea.selectionEnd;
  mycurtxtl=mytxtarea.textLength;
  myvalue=mytxtarea.value;
mytxtarea.value=mytxtarea.value.substr(0,mytxts)+"["+mytag+"]"+mytxtarea.value.substr(mytxts,mytxte-mytxts)+"[/"+mytag+"]"+mytxtarea.value.substr(mytxte,mycurtxtl);
}
}

//-->
</script></head><body>

<form method="POST" action="#" name="formnavn" style="position:relative;">
<textarea rows="5" name="txtareanavn" cols="20"></textarea><br>

<button id="button1" onclick="switchdis('box1');return false;">Skift</button>

<div id="box1" class="dropdownbox" style="position:absolute;top:0px;left:0px;display:none;">
<input type="button" onclick="findselect('b');switchdis('box1');" value="Fed skrift">
<input type="button" onclick="findselect('i');switchdis('box1');" value="Kursiv skrift">
<input type="button" onclick="findselect('u');switchdis('box1');" value="Understreget skrift">
</div>

</form>

</body></html>
Avatar billede mclemens Nybegynder
02. januar 2007 - 10:22 #2
Skåret lidt ned:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

function findselect(mytag){
mytxtarea=document.formnavn.txtareanavn;

if(document.selection){
  mytxt=document.selection.createRange().text;
  if(mytxt!="")document.selection.createRange().text="["+mytag+"]"+mytxt+"[/"+mytag+"]";
}else if((mytxtarea.selectionEnd-mytxtarea.selectionStart)>0){
  mytxts=mytxtarea.selectionStart;
  mytxte=mytxtarea.selectionEnd;
  mycurtxtl=mytxtarea.textLength;
  myvalue=mytxtarea.value;
mytxtarea.value=mytxtarea.value.substr(0,mytxts)+"["+mytag+"]"+mytxtarea.value.substr(mytxts,mytxte-mytxts)+"[/"+mytag+"]"+mytxtarea.value.substr(mytxte,mycurtxtl);
}
}

</script></head><body>

<form method="POST" action="#" name="formnavn" style="position:relative;">
<textarea rows="5" name="txtareanavn" cols="20"></textarea><br>

<input type="button" onclick="findselect('b');" value="Fed skrift">
<input type="button" onclick="findselect('i');" value="Kursiv skrift">
<input type="button" onclick="findselect('u');" value="Understreget skrift">

</form>

</body></html>
Avatar billede reffo Nybegynder
02. januar 2007 - 10:26 #3
Okay, skal måske lige siges at jeg aldrig har rørt javascript før. Hvad gør document.selection.createRange() helt præcis? Har set den i diverser scripts, men har ikke kunnet finde noget info om det.
Avatar billede mclemens Nybegynder
02. januar 2007 - 10:34 #4
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createrange.asp
selectionStart / selectionEnd: http://developer.mozilla.org/en/docs/XUL:textbox

... Det er til at snuppe det valgte tekst og pille ved det ...
Avatar billede reffo Nybegynder
02. januar 2007 - 10:46 #5
Hmm, kigger jeg lige på. Du har ikke en idé om hvorfor det jeg har lavet kun dur i FF?
Avatar billede mclemens Nybegynder
02. januar 2007 - 10:51 #6
Kunne ikke lige få den du lavede til at virke i min FF ...

Min er herinde fra: http://www.eksperten.dk/spm/699413
Og lige et link mere til hvor jeg fandt det om selection ... :
http://developer.mozilla.org/en/docs/XUL_Tutorial:Focus_and_Selection#Focused_Elements

- Kaster lige et svar hvis du kunne bruge den :)
Avatar billede reffo Nybegynder
02. januar 2007 - 10:54 #7
Hmm, har du husket at give dit textarea id='post'?
Avatar billede mclemens Nybegynder
02. januar 2007 - 10:58 #8
Nix, det har jeg nu ...
Men den virker da ens i FF og IE?
Avatar billede reffo Nybegynder
02. januar 2007 - 10:58 #9
Dur den i IE ved dig?
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:00 #10
Hvis jeg bytter rundt på:
input.value        = newvalue;

textarea.focus();

så der står:

textarea.focus();

input.value        = newvalue;

vil fokus også rettes til enden hver gang.
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:02 #11
Den jeg tester på er:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title><meta name="robots" content="index, follow">

<script type="text/javascript">

function insertcode(tag,id)
        {
        var textarea    = document.getElementById('post');

        var input        = document.getElementById(id);

        var test        = input.value.indexOf('/');

     
        if    (test == '-1')
            {
                slash        = '';
                newvalue    = '/' + id;
            }
        else
            {
                slash = '/';
                newvalue    = id;
            }

        var html        = '<' + slash + tag + '>';

        var text        = textarea.value;

        var newtext        = text + html;

        textarea.value    = newtext;
        textarea.focus();
        input.value        = newvalue;


        }
</script>

</head><body>
<input type='text' id="post">
<input type='button' onclick="insertcode('strong', 'b');" value='b' id='b' title='Bold text'>
</body></html>
Avatar billede reffo Nybegynder
02. januar 2007 - 11:02 #12
Jamen det dur sq også her når jeg ta'r det ud af min kode. Det må være noget i resten af koden der ødelægger det så. Har bare ingen anelse om hvad:S
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:03 #13
IE 6.0 sp 2
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:03 #14
Godt spørgsmål ...
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:05 #15
Du har ikke et andet element der har name="post" ?
eller måske et der har name="b" ?

eksempel med post name:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title><meta name="robots" content="index, follow">

<script type="text/javascript">

function insertcode(tag,id)
        {
        var textarea    = document.getElementById('post');

        var input        = document.getElementById(id);

        var test        = input.value.indexOf('/');

     
        if    (test == '-1')
            {
                slash        = '';
                newvalue    = '/' + id;
            }
        else
            {
                slash = '/';
                newvalue    = id;
            }

        var html        = '<' + slash + tag + '>';

        var text        = textarea.value;

        var newtext        = text + html;

        textarea.value    = newtext;
        textarea.focus();
        input.value        = newvalue;


        }
</script>

</head><body>

<img src="" name="post">

<textarea id="post"></textarea>

<input type='button' onclick="insertcode('strong', 'b');" value='b' id='b' title='Bold text'>
</body></html>
Avatar billede reffo Nybegynder
02. januar 2007 - 11:05 #16
Ja, nå, men så må jeg ind og kigge på resten af siden. Men tak for hjælpen alligevel, og tak for linksne
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:06 #17
Eksempel på problemet med name cs. id:
http://www.eksperten.dk/spm/734465#rid6443411
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:06 #18
Ok, tak for point :)
Avatar billede reffo Nybegynder
02. januar 2007 - 11:09 #19
Wow, det var heldigt. Tænkte bare jeg ville prøve at ændre id'et, og det virkede sgu, hehe. Der må have været nogle problemer nogle andre id'er...

Skønt. Det var så lidt
Avatar billede reffo Nybegynder
02. januar 2007 - 11:10 #20
Ahh, det har måske noget med det sikkerhedsnet at gøre eller hvad?
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:17 #21
Yes, nogle af de bedste hensigter fra MS kan give nogle af de største problemer ... Kodningen fejler jo intet - det er bare fordi at den overbeviser sig om at getElementById(idet) skal hente getElementsByName(idet)[0]. hvis name er der - eller modsat... Egentlig noget jeg sad og grublede over i lang tid, da jeg selv engang havde lavet en lang kode og så ikke kunne forstå, at det ikke virkede :D

Sikkerhedsnet er måske et forkert ord ... "Kodnings - elastisk" - net eller noget lignende er måske bedre, ved ikke hvad man burde kalde det, men når man løber ind i problemer med det, så ville man jo ønske, at det ikke var der :o)

Fedt at det kom til at virke :)
Avatar billede reffo Nybegynder
02. januar 2007 - 11:19 #22
Cool nok. Så er jeg klar over hvad jeg måske skal kigge efter næste gang. Tusind tak for hjælpen, og godt nytår:D
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:19 #23
Det kan dog også være fordi at du er kommet til at bruge 2 ens id'er ...
Avatar billede mclemens Nybegynder
02. januar 2007 - 11:19 #24
Takker, godt nytår til dig også :)
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