Avatar billede gider_ikke_mere Nybegynder
05. marts 2006 - 17:46 Der er 18 kommentarer og
1 løsning

Hjælp til forståelse af function

Hvad er der galt her:

function emoticon(text, formnavn) {
        text = ' ' + text + ' ';
        if (document.formnavn.test.createTextRange && document.formnavn.message.caretPos) {
                var caretPos = document.formnavn.test.caretPos;
                caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
                document.formnavn.test.focus();
        } else {
                document.formnavn.test.value  += text;
                document.formnavn.test.focus();
        }
}

formnavn skulle have værdien 'post' men jeg får fejlen:

document.formnavn.test er null eller ikke et objekt
Avatar billede webudvikleren Nybegynder
05. marts 2006 - 17:54 #1
hedder din form "formnavn" og har input-feltet "test"?
<form id="formnavn" name="formnavn" ..>
<input type="text" id="test" name="test" />

?
Avatar billede gider_ikke_mere Nybegynder
05. marts 2006 - 17:58 #2
Nej formen hedder post og input hedder test!
Avatar billede gider_ikke_mere Nybegynder
05. marts 2006 - 18:02 #3
Hvis jeg bare gør således:

function emoticon(text) {
        text = ' ' + text + ' ';
        if (document.post.test.createTextRange && document.post.message.caretPos) {
                var caretPos = document.post.test.caretPos;
                caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
                document.post.test.focus();
        } else {
                document.post.test.value  += text;
                document.post.test.focus();
        }
}
... så virker det fint. Problemet er bare at jeg gerne vil bruge funktionen andre steder hvor form name hedder noget andet!
Avatar billede softspot Forsker
05. marts 2006 - 20:37 #4
function emoticon(text, formnavn) {
  var frm = document.forms[formnavn];
  text = ' ' + text + ' ';

  if (frm.test.createTextRange && frm.message.caretPos) {
    var caretPos = frm.test.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
    frm.test.focus();
  } else {
    frm.test.value  += text;
    frm.test.focus();
  }
}
Avatar billede gider_ikke_mere Nybegynder
06. marts 2006 - 20:01 #5
softspot: Det virker fint. Tak for hjælpen.
Avatar billede softspot Forsker
06. marts 2006 - 21:52 #6
Velbekomme :)
Avatar billede gider_ikke_mere Nybegynder
06. marts 2006 - 21:59 #7
Lige en ting mere

skulle jeg ikke kunne få navnet på et input felt med på denne måde:

function emoticon(text, formnavn, inputnavn) {
  var frm = document.forms[formnavn];
  var elem = frm.elements[inputnavn];


... jeg får fejlen "elem.createTextRange er null eller ikke et objekt..."

Hvordan kan jeg sætte en variabel på et input name?
<input name=envariabel bla. bla.>
Avatar billede gider_ikke_mere Nybegynder
06. marts 2006 - 21:59 #8
Nå, så 2 ting mere da ;-)
Avatar billede softspot Forsker
06. marts 2006 - 22:08 #9
Det første burde da fungere (hvis ellers den kontrol tillader at du laver textRanges på det).

Det sidste forstår jeg ikke helt hvad du mener med...? Hvis det er noget med at tildele navnet dynamisk på grundlag af indholdet i en variabel, så er du nok nød til lige at forklare hvorfor du vil det (det jeg mener er at der må være en anden måde at opnå det du ønsker)...
Avatar billede gider_ikke_mere Nybegynder
06. marts 2006 - 22:15 #10
Det første fungerer af en eller anden grund ikke.

Det sidste: Jeg skal bruge funktionen emoticon() flere forskellige steder.
Jeg definerer variablerne, altså navnene på "Form" og "Input" i et script i head. Derfor kunne det være rart at jeg i min form name bare kunne skrive <form name=variablenavn bla. bla. bla. > i stedet for at skulle huske at skrive det rigtige navn 2 steder: ved definering af variabler og ved "form" og "input" name.

Hmmm - forstod du den?
Avatar billede gider_ikke_mere Nybegynder
06. marts 2006 - 22:19 #11
<script language='javascript'>var formnavn = 'post'; var inputnavn = 'tekstskrevet';</script>

<form name="post" method="POST">
<input type="text" id="message" name="tekstskrevet" onSelect="storeCaret_post(this);" onClick="storeCaret_post(this);" onKeyUp="storeCaret_post(this);" maxlength="512" >

<a href="java script:emoticon(':lol:', formnavn, inputnavn)"><img src="../pics/smileys/icon_storgrin.gif" alt=" :lol:" width="15" height="15" border="0" title=" :lol:"></a>
</form>

Ved klik på smiley ikon sættes teksten :-) på det sted i input hvor curseren står. Jeg ville gerne kunne skrive: <form name=<script>formnavn;</script> method="POST"> eller lignende.
Avatar billede softspot Forsker
06. marts 2006 - 22:21 #12
Hvad er det for en kontrol du prøver at skabe en textrange på?

Hvad angår koblingen af navne og forms/felter, er fidusen så ikke at du kan genfinde felter og forms via de navne du definerer...(jeg har nok stadig ikke fattet det :))?
Alternativt, så lad formularen være din definition, så du bruger en form og de elements der ligger på den - så slipper du også for at trække navnene ud i en "kunstig" struktur. Det kan godt være du er nød til lige at lave et konkret eksempel der illustrerer hvordan du påtænker at bruge det (altså definere et par forms med felter og hvordan de kobles sammen med din funktion).
Avatar billede gider_ikke_mere Nybegynder
06. marts 2006 - 22:32 #13
Det hele bunder i at jeg gerne vil bruge funktionen fra et .js script og kalde denne på de sider hvor jeg skal bruge den. Da det er på en PHP hjemmeside som er i fuld funktion er jeg ikke så glad for at skulle til at omdøbe alle mine forms og inputs, og dermed rette en masse steder. Mine forms og inputs hedder nemlig ikke det samme på de forskellige sider! PHP er jeg rimelig god til, men Javascript er sort snak for mig. Koden har jeg hugget og omskrevet efter bedste formåen. Der er altså kun en form og et input på hver side!
Avatar billede softspot Forsker
06. marts 2006 - 22:33 #14
Hmm... min umiddelbare opfattelse af det med variabler og navne er at du opnår noget kode der er for kompleks til at retfærdiggøre arbejdet ved at implementere det. En genvej (og simpel metode) kunne være at bruge et serversprog som VBS eller PHP til at definere variablerne og indsætte dem når siden bliver genereret, men jeg ved ikke om dette er muligt for dig at gøre dette...
Avatar billede softspot Forsker
06. marts 2006 - 22:35 #15
Det er da grov som vi krydser hinanden :D
Avatar billede gider_ikke_mere Nybegynder
06. marts 2006 - 22:38 #16
Burde man ikke kunne skrive <form name="java script: formnavn;" method="POST"> eller lignende?
Avatar billede softspot Forsker
06. marts 2006 - 22:42 #17
Jeg mener ikke du har mulighed for den slags dynamik i navngivning af formfelter.

Jeg tror desværre ikke lige jeg kan ryste en løsning på dine to sidste udfordringer ud af ærmet :(

Hvis der kun er en form på hver side, kan du måske bruge denne metode:

document.forms[0].setAttribute("name", formnavn);

men du er afhængig af en eller anden metode til at identificere de felter og forms som du vil ændre navnet på.

Der er som sagt alternativet med at bruge en PHP-variabel.
Avatar billede gider_ikke_mere Nybegynder
06. marts 2006 - 22:46 #18
Jeg kan ikke bruge PHP, da jeg skal sætte teksten ind uden at reloade siden. men tak for hjælpen!
Avatar billede softspot Forsker
07. marts 2006 - 00:33 #19
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