Avatar billede mtrolle Nybegynder
04. august 2003 - 16:55 Der er 24 kommentarer og
1 løsning

Script der hele tiden kører

Hejsa!

Jeg er komplet idiot i javascript, men har kodet PHP i 4 år nu og tænkte det måtte være på tide at lege lidt med det... Men allerede i første forsøg misser jeg :)

Jeg har lavet en lille matematik opgave, hvor man skal sætte nogle tal ind på kryds og tværs og få det til at gå hele vejen rundt...
Til at tjekke den første række har jeg skrevet denne kode:

<script language="javascript" type="text/javascript">
if((8 - felt_1_1.value - felt_1_2.value) == 3) {
  document.write('<img src="hak.png" alt="" />');
}
</script>
Men øhh, det virker jo bare ikke...
Der skal vel bruges noget onchange="" som udfører scriptet, eller hvad?


Håber en kan hjælpe mig...
//mtrole
Avatar billede sorteplov Nybegynder
04. august 2003 - 16:58 #1
Er det nogle formfelter du bruger?
Avatar billede roenving Novice
04. august 2003 - 16:59 #2
? Øeh ...

Du blander vist for meget af din php-lærdom ind i ...

1. Du kan ikke på den måde du gør det skriv html-kode ind i et dokument, som er lukket !-)

2. Og selvfølgelig skal du have en action som udløser det ...
Avatar billede roenving Novice
04. august 2003 - 17:01 #3
-- og dine felt-navne er uhensigtsmæssigt brugt, hvis du vil lære at kode til internettet og ikke kun til nyere M$-produkter ...
Avatar billede roenving Novice
04. august 2003 - 17:02 #4
Prøv at vise html-koden også, så er jeg sikker på, at du hurtigt vil blive guidet i den rigtige retning !-)
Avatar billede mtrolle Nybegynder
04. august 2003 - 17:25 #5
Hej igen... Jeg modtog ikke nogle emails på det var lagt nogle svar, underligt...

roenving>Når du skriver M$ henviser du så til det kærer Microsoft? Jeg er Apple-bruger, så det er bestemt ikke mit ønske at sigte efter at ramme MS-produkter kun...

Min kode er meget lang, men her kommer et udsnit af den:
    <tr>
        <td style="border:1px solid black; width:20px; height:20px;"><p><strong>8</strong></p></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><p><strong>-</strong></p></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><input name="felt_1_1" maxlength="1" style="width:19px;" /></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><p><strong>-</strong></p></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><input name="felt_1_2" maxlength="1" style="width:19px;" onchange="tjek('8','-',felt1_1.value,'-',felt1_2.value,'3')" /></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><p><strong>=3</strong></p></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;">
<script language="javascript" type="text/javascript">
function tjek(var1, type1, var2, type2, var3, res)
{
if((var1 type1 var2 type2 var3) == res) {
  document.write('<img src="hak.png" alt="" />');
}

document.write(felt_1_1.value);
</script>
</td>

    </tr>

Og i øvrigt har jeg prøvet at lave det om til en funktion, da det jo så burde kunne lade sig gøre...
Og her har vi adressen på siden:
http://mortentrolle.dk/?show=iq2
Koden herover hører til første linje i tabellen. Den linje hvor der ikke er noget hak nu.


//mtrolle
Avatar billede roenving Novice
04. august 2003 - 17:55 #6
Et eksempel, jeg har efterladt et par alerts, som du selvfølgelig skal fjerne, nå du kommer langt nok -- men som illustration af hvordan man får en oplysning frem i javascript ...

<form name="quiz">
<table cellspacing="0">
    <tr ALIGN="center">
        <td style="border:1px solid black; width:20px; height:20px;"><strong>8</strong></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><strong>-</strong></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><input name="felt_1_1" maxlength="1" style="width:19px;" onchange="alert(this.form.name);"/></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><strong>-</strong></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><input name="felt_1_2" maxlength="1" style="width:19px;" onchange="tjek('8','-',this.form.felt_1_1.value,'-',this.value,'3')" /></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><strong>=3</strong></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;">
<img src="spacer.gif" id="firstGif" width="19" height="19">
<script language="javascript" type="text/javascript">
function tjek(var1, type1, var2, type2, var3, res)
{
if(eval(var1+type1+var2+type2+var3) == res) {
  alert(var3);
  document.getElementById('firstGif').src = "hak.png"
}

</script>
</td>

Desuden er det sat ind i en form, så det har jeg kopieret med ...
Avatar billede mtrolle Nybegynder
04. august 2003 - 18:04 #7
Jeg har gjort næsten det samme... Virkede ikke... Nu har jeg prøvet med dit, virker heller ikke. Jeg gjorde således:

<script language="javascript" type="text/javascript">
fejl = new Image; fejl.src = "fejl.png";
hak = new Image; hak.src = "hak.png";
function tjek(var1, type1, var2, type2, var3, res)
{
if(eval(var1 type1 var2 type2 var3) == res) {
  alert(var3);
  document.getElementById('image1').src = hak.src;
} else {
document.image1.src = fejl.src;
  alert(var3);
}

</script>

Og HTML-koden:
    <tr>
        <td style="border:1px solid black; width:20px; height:20px;"><p><strong>8</strong></p></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><p><strong>-</strong></p></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><input name="felt_1_1" maxlength="1" style="width:19px;" onchange="tjek('8','-',felt1_1.value,'-',felt1_2.value,'3')" /></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><p><strong>-</strong></p></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><input name="felt_1_2" maxlength="1" style="width:19px;" onchange="tjek('8','-',felt1_1.value,'-',felt1_2.value,'3')" /></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><p><strong>=3</strong></p></td>
        <td style="border:1px solid black; border-left:0px; width:20px; height:20px;"><img src="fejl.png" name="image1" alt="" />
</td>

    </tr>

Jeg fatter det ikke, det burde da virke, eller hvad?
//mtrolle
Avatar billede roenving Novice
04. august 2003 - 18:08 #8
Bemærk +'erne:

if(eval(var1+type1+var2+type2+var3) == res) {

Og bemærk this.form og this.value:

onchange="tjek('8','-',this.form.felt_1_1.value,'-',this.value,'3')"
Avatar billede mtrolle Nybegynder
04. august 2003 - 18:17 #9
Gør det nogen forskel om funktionen er angivet i headeren eller om den blot ligger i body?

Jeg har rettet op på koden som du sagde og det virker bare ikke :(
www.mortentrolle.dk/?show=iq2
Avatar billede roenving Novice
04. august 2003 - 23:53 #10
Du havde overset din fejl: this.form.felt_1_1.value <-- der mangler en _ i din kode
Avatar billede mtrolle Nybegynder
04. august 2003 - 23:58 #11
Øv, det hjalp heller ikke...

Jeg er helt lost i det her...
Avatar billede roenving Novice
05. august 2003 - 00:01 #12
-- og du spurgte jo også om noget:

Det betyder ikke det fjerneste hvor du har din kode ...

Den _skal_ ligge indenfor html-start og -slut-tags -- du har faktisk placeret <html> forkert -- det skal ligge allerførst (kun f.eks. <!DOCTYPE må ligge foran !-)

-- men denne placering skulle ikke betyde noget hvis du sidder på IE på Windows *g*

Men jeg har en formodning om, at koden også kan generere fejl, hvis den er før <head> -- men det er en formodning !-)

Altså: javascript-kode kan placeres her:

<html>
<head>
<!--Tidligste placering af javascript-blok-->

<title>Husk title er obligatorisk for validering</title>
<!--Også encoding er obligatorisk:-->
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>

</body>

<!--Seneste placering af javascript-blok-->
</html>

Ovenstående er altså nærmest det minimale html-dokument, som kan valideres efter html 4.01-standarden !-)
Avatar billede roenving Novice
05. august 2003 - 00:03 #13
-- og så lige for at få den med:

Hvis du skal kunne regne med, at IE går efter de samme standarder som de andre browsere, så der er en rimelig chance for at det ser ens ud, hvis man for alvor kombinerer css og egentlig layout, skal du sætte denne eller en tilsvarende foran <html>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
Avatar billede mtrolle Nybegynder
05. august 2003 - 00:05 #14
Fedt, så fik jeg da slået det på plads... Det har jeg altid undret mig over, for nogle gange skrive diverse hjælpesider, at det skal indsættes i headeren og andre skriver efter headeren osv.

Jeg har nu flyttet mit <html>-tag og tak for det, men det hjalp bare ikke :)
Avatar billede mtrolle Nybegynder
05. august 2003 - 00:07 #15
punkt nummer du med doctype er hermed også gjort...
Min det har vel ikke det store at sige hvad mine design-egenskaber angår :)
Avatar billede roenving Novice
05. august 2003 - 01:29 #16
Jamen din kode virker zq da, når jeg kører den -- og det både i IE og Mozilla ...

-- selvfølgelig med de rettelser, jeg havde angivet !-)

-- har du prøvet at paste min kode ovenpå ?-)

-- og du har vel også puttet et </form>-tag ind hvor du afslutter tabellen !!!
Avatar billede roenving Novice
05. august 2003 - 01:34 #17
Jeg placerer personligt _alle_ scripts i headeren ...

Een ting er hvad javascript-fortolkeren kan finde -- en helt anden hvad jeg skal finde for at lave en lille rettelse !-)

Jeg ville selvfølgelig også finde på at lave en generaliseret funktion, som kan virke uanset hvilken linje eller række som skal udregnes, hvis jeg senere skal lave en lille ændring skal jeg ikke lede trehundrede eller for den sags skyld tretusinde lijer kode igennem for at finde ud af, hvor den kode jeg skal ændre ligger !o]
Avatar billede mtrolle Nybegynder
05. august 2003 - 07:54 #18
dit virker også. Den udsender i alt fald din første alarm, men så heller ikke længere.
Altså alarmen i input feldt 1_1.

Morten
Avatar billede mtrolle Nybegynder
05. august 2003 - 08:35 #19
Din er sat ind på www.mtrolle.dk/test.html
Og wupti, det virker heller ikke (ikke her i alt fald)...


//mtrolle
Avatar billede roenving Novice
05. august 2003 - 12:09 #20
Det virker ganske udmærket, men onchange kan først registreres, når html-/javascript-fortolkeren er sikker på at du er færdig med at indtaste, og den onchange affyres derfor, når du _forlader_ feltet ...

Man kunne så overveje, om man skulle sørge for at man ikke skulle forlade feltet før den reagerede positivt eller negativt ...

-- men i dette tilfælde er det næppe nogen god ide, for man kunne jo forestille sig en, som var ved at skrive et forkert tal, men ramte 'forkert' på det rigtige tal ...

Men skal det være sådan skal du bruge onkeyup som udløser af scriptet i stedet for onchange !-)
Avatar billede mtrolle Nybegynder
06. august 2003 - 20:24 #21
Hejsa!

sørme så, det virker sgu også på min pc, er der nogen speciel grund til det ikke virker på min mac?

Smid et svar, du har så sandelig fortjent mine point roenving...


//mtrolle
Avatar billede roenving Novice
06. august 2003 - 20:27 #22
Jeg kunne godt forestille mig, at der kunne være en grund, men jeg ved ikke hvilken, for en mac har jeg ikke haft fat i, og det er for subtilt at sætte sig grundigt ind i, når man ikke har sådan en fætter i nærheden !-)

Velbekomme '-)
Avatar billede roenving Novice
06. august 2003 - 20:27 #23
;O)
Avatar billede roenving Novice
14. august 2003 - 09:42 #24
-- og tak for points ;~}
Avatar billede mtrolle Nybegynder
14. august 2003 - 15:37 #25
selv tak, tak for hjælpen :)
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