Avatar billede lsskaarup Nybegynder
03. oktober 2002 - 09:21 Der er 29 kommentarer og
1 løsning

Dynamisk ændring af tekst

Hej, jeg skal bruge en stump kode, der dynamisk ændre en tekst i et textarea. Dette skal ske nå, man vælger et punkt i en menu.
Avatar billede pelkjaer Nybegynder
03. oktober 2002 - 09:39 #1
<script type="text/JavaScript">
<!--
function passText(passedvalue) {
  if (passedvalue != "") {
    var totalvalue = passedvalue;
    document.AddForm.menID.value = totalvalue;
    newvalue = document.AddForm.menID.value;
  }
}
//-->
</script>

<form method="post" name="AddForm" id="AddForm">
<select name="dropdownbox" style="width:174px;" onchange="passText(this.form.dropdownbox.options[this.form.dropdownbox.selectedIndex].value);">
<option value="">Vælg menupunkt</option>
<option value="Tekst 1">Tekst 1</option>
<option value="Tekst 2">Tekst 2</option>
<option value="Tekst 3">Tekst 3</option>
<option value="Tekst 4">Tekst 4</option>
<option value="Tekst 5">Tekst 5</option>
</select>
<br>
<input type="text" name="menID" id="menID" style="width:175px;">
</form>
Avatar billede lsskaarup Nybegynder
03. oktober 2002 - 09:50 #2
kigger lige om det virker, vender tilbage senere
Avatar billede lsskaarup Nybegynder
03. oktober 2002 - 10:54 #3
Kan ikke udmiddelbart få det til at virke. Min kode er som følger

<!--
function passText(passedvalue) {
  if (passedvalue != "") {
    var totalvalue = passedvalue;
    document.AddForm.menID.value = totalvalue;
    newvalue = document.AddForm.menID.value;
  }
}
//-->
</script>

<select class="input2" name="ansvarlig" onchange="passText(this.form.ansvarlig.options[this.form.ansvarlig.selectedIndex].value);">
<?$medarbejder = mysql_query("SELECT navn, medarbejderId FROM Medarbejder WHERE fratraedelsesdato = '0000-00-00'");
while ($data = mysql_fetch_array($medarbejder)){?>
      <option value="<?=$data[medarbejderId]?>" <? if($data[medarbejderId]==$medarbejderId){echo "selected";}?>><?=$data[navn]?></option>
<?}?></select>

<textarea class="input2" name="oversættelses_kom" id="menID" rows="2"><?=$viskommentar[kommentar]?></textarea>

Hvad kan problemet være
Avatar billede lsskaarup Nybegynder
03. oktober 2002 - 10:56 #4
Formen har selvfølgelig fået fået name="AddForm" og id="AddForm"
Avatar billede Slettet bruger
03. oktober 2002 - 14:18 #5
Det er sgu også et besværligt script.
Dette er tusind gange nemmere:

<select ... onChange="this.form.menID.value = this.options[this.selectedIndex].value;">
...
</select>

Du skal ikke ændre på noget.
Avatar billede pelkjaer Nybegynder
03. oktober 2002 - 14:44 #6
Nu kan jeg ikke php - men uden din php kode virker det fint.

med asp ville jeg da heller ikke have kode nede i textarea'et med lave noget alá:


<script>
<!--
function passText(passedvalue) {
  if (passedvalue != "") {
    var totalvalue = passedvalue;
    document.AddForm.menID.value = totalvalue;
    newvalue = document.AddForm.menID.value;
  }
}
//-->
</script>

og

<form id="AddForm" name="AddForm">

<select class="input2" name="ansvarlig" onchange="passText(this.form.ansvarlig.options[this.form.ansvarlig.selectedIndex].value);">
<option value="">Vælg menupunkt</option>

<!--her starter en repeat region
<option value="her er aspkode">her er evt. også aspkode</option>
//-->her slutter en repeat region

</select>

<textarea class="input2" name="oversættelses_kom" id="menID" rows="2"></textarea>

</form>
Avatar billede lsskaarup Nybegynder
03. oktober 2002 - 16:02 #7
Jeg har nu fået det til at virke. Dumme mig var kommet til at sætte koden ind på den forkerte menu.
Avatar billede lsskaarup Nybegynder
04. oktober 2002 - 11:27 #8
jeg ved godt at spørgsmålet er lukket, men jeg har lige et enkelt mere i forbindelse dermed. Det som jeg får skrevet ud at value i menuen, har bliver jeg nødt til at arbejde med et id. Det som jeg skulle have udskrevet er en kommentar tilhørende dette id, hvordan kan jeg gøre dette ?
Avatar billede lsskaarup Nybegynder
04. oktober 2002 - 11:29 #9
kan jeg ligge en sql-kald i en funktion, så jeg henter kommentaren ud fra det leverede id ?
Avatar billede pelkjaer Nybegynder
04. oktober 2002 - 11:36 #10
Kan du uddybe, jeg forstår ikke helt dit sp.
Avatar billede lsskaarup Nybegynder
04. oktober 2002 - 11:45 #11
jeg kan da prøve.

I min <option value="<?=$data[medarbejderId]?>...., som du kan se har jeg ikke en tekst som i dit eksempel, med et id. Dette skal være der, da jeg bruger det til at koble en masse sammen i en database. Det betyder også, at det jeg får skrevet ud er dette id, og det skal jeg ikke. På dette id ligger der i databasen en kommentar, som er det jeg skal have skrevet ud.

Jeg skal så have lavet en query, der henter kommentaren omkring dette id. Problemet er så hvordan jeg får kommentaren over i passText(), i stedet for id'et.

Hjælp det på forståelsen ?
Avatar billede lsskaarup Nybegynder
04. oktober 2002 - 11:47 #12
jeg har prøvet at sende en php-variable indeholdende kommentaren med, og tilpasse passText, men så får jeg en fejl om at variablen ikke er defineret.
Avatar billede pelkjaer Nybegynder
04. oktober 2002 - 11:49 #13
Nåhh jeg aner som sagt intet om php.

Men i asp ville jeg lave et recordset, hive "kommentar" feltet ud med order by id desc elller lign.

Så kan du bare i din option value hive kommentarene ud istedet.
Avatar billede lsskaarup Nybegynder
04. oktober 2002 - 11:52 #14
ja, men jeg kan ikke sætte kommentaren ind i option value, da jeg skal bruge id'et her.
Avatar billede pelkjaer Nybegynder
04. oktober 2002 - 11:58 #15
Jamen hvis du nu laver noget ala

<option value="php_kode_id">php_kode_kommentar</option>

så vil id og kommentar jo følges ad fordi det har du bestemt i dit "recordset"? Eller hvad..
Avatar billede lsskaarup Nybegynder
04. oktober 2002 - 16:30 #16
Det har jeg faktisk, men hvordan får jeg fat i kommentaren. Til value bruger du jo ".value".
Avatar billede Slettet bruger
05. oktober 2002 - 09:16 #17
.text er teksten imellem <option ...> og </option>.
Avatar billede lsskaarup Nybegynder
05. oktober 2002 - 16:44 #18
okay prøver det lige
Avatar billede lsskaarup Nybegynder
05. oktober 2002 - 16:50 #19
har nu prøvet at skifte alle .value ud med .text, men det virker ikke. Jeg skal da både ændre value i funktionen samt der hvor jeg sender værdien med ?
Avatar billede Slettet bruger
06. oktober 2002 - 09:33 #20
Godt, så starter vi forfra. Funktionen passText er totalt ligegyldig, da det kan ordnes med én linje kode i <select>-tagget:

<select ... onChange="this.form.menID.value = this.options[this.selectedIndex].text;">

Nu kommer menID til at indeholde den valgte option's tekst.
Jeg vil anbefale dig at lave menID til et hidden-felt, hvis du ikke allerede har gjort det:

<input type="hidden" value="" name="menID">
Avatar billede lsskaarup Nybegynder
06. oktober 2002 - 12:15 #21
jeg kan godt få textarea til at ændre indhold alt efter hvad der vælges i menuen, men mit problem er at jeg ikke ved hvordan jag skal få kommentaren til dette menuid til at komme i textarea.

For det eneste jeg har på menuen er indholdet, altså det som der står, samt id'et for punkterne i menuen. For at kunne få kommentaren til det bestemt id, er jeg nødt til at foretage et kald til DB. Mit problem er så hvordan jeg får sat onChange="this.form.oversættelses_kom.value = this.options[this.selectedIndex].  en php-variabel indeholdende retuneringen af kaldet    ;">
Avatar billede Slettet bruger
06. oktober 2002 - 13:22 #22
Nårh, nu forstår jeg.
Det er nemt nok:

<script>
komm = new Array();
//Udskrives vha. PHP:
komm[0] = new Array("id1", "Kommentar 1"); // Først ID, derefter kommentar
komm[1] = new Array("id2", "Kommentar 2");
komm[2] = new Array("id3", "Kommentar 3");
komm[3] = new Array("id4", "Kommentar 4");

function hent_komm(id) {
for (i = 0; i < komm.length; i++)
if (komm[i][0] == id)
return komm[i][1];
}
</script>

I select-tagget:

<select ... onChange="this.form.menID.value = hent_komm(this.options[this.selectedIndex].value);">
Avatar billede lsskaarup Nybegynder
06. oktober 2002 - 14:31 #23
Kanont nu kan jeg lidt af vejen, men det store problem er at id og kommentar begge skal være dynamiske, da brugeren har mulighed for både at slette og lave nye id'er, samt ændre kommentaren på disse id'er. Det vil sige, at når jeg definerer hvad der står i array, skal den hente oplysninger som står i DB
Avatar billede lsskaarup Nybegynder
06. oktober 2002 - 14:33 #24
hvis det lykkedes for dig at hjælpe mig med dette, venter der selvfølgelig nogle point.
Avatar billede lsskaarup Nybegynder
06. oktober 2002 - 14:41 #25
kan man i javascript ikke lave en forbindelse til db, og så hente oplysninger ud via denne ?

Jeg har prøvet dette, men da jeg aldrig har arbejdet i javascript før, ved jeg ikke om der skal stå noget specielt, ligesom f.eks. i PHP ved <? og ?>. Det jeg prøvede virkede i hvert fald ikke, får en obejct fejl i Explorer

komm = new Array();
kald = mysql_query("SELECT * FROM Samarbejdspartner");
svar = mysql_fetch_array($kald);

while (svar){
    kom = svar[kommentar];
    id = svar[samarbejdspartnerId];
    for (i=0; i<svar;i++)
        komm[i] = new Array(id, kom);
}
Avatar billede lsskaarup Nybegynder
07. oktober 2002 - 16:02 #26
Jeg har nu fået det til at virke, bare ikke helt så dynamisk som jeg gerne ville have. I javascriptet skriver jeg

komm = new Array();
<?$kald = mysql_query("SELECT * FROM Samarbejdspartner");?>
komm[0] = new Array(0,'');<?
$j = 1;
while ($svar = mysql_fetch_array($kald)){
    //lave et array til hver samarbejdspartner indeholdende id og kommentar
    $kom = $svar[kommentar];
    $id = $svar[samarbejdspartnerId];?>
    komm[<?=$j?>] = new Array(<?=$id?>,'<?=$kom?>');
    <?$j = $j + 1;
}?>

function getOverKom(id, felt){
    feltkom=document.getElementById("overId");
    feltkom.value=hent_komm(id);
}

function getTrykKom(id, felt){
    feltkom=document.getElementById("overTryk");
    feltkom.value=hent_komm(id);
}

function hent_komm(id) {
    for (i = 0; i < komm.length; i++)
        if (komm[i][0] == id){
            return komm[i][1];
        }
}

i select skriver jeg så

onchange="getOverKom(this.value, 'overId');"

og textarea som skal opdateres/skrives i får f.eks. id'et overId

Der hvor det går galt, er i
feltkom=document.getElementById("overTryk");
her bliver jeg nødt til direkte at skrive navnet på textarea, ideen var at det skulle komme dynamisk. Af denne grund er jeg også nødt til at lave 2 funktioner der i bund og grund gør det sammen, men til hvert sit textarea.
Avatar billede Slettet bruger
07. oktober 2002 - 16:04 #27
Jamen hvorfor gør du det i en funktion? Som jeg har vist dig, så er det tusind gange nemmere at gøre det i hver sin select!
Avatar billede lsskaarup Nybegynder
07. oktober 2002 - 16:24 #28
ja det kan jeg godt se, men jeg kunne ikke få det til at virke
Avatar billede Slettet bruger
08. oktober 2002 - 17:52 #29
Så smid et link. Det fungerer jo på samme princip som pelkjaer's; jeg har bare droppet en hel masse unødvendig "fløde".
Avatar billede lsskaarup Nybegynder
08. oktober 2002 - 19:09 #30
nej med tak for tilbudet, det er lige meget nu.
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