Avatar billede Morten Professor
10. april 2017 - 10:51 Der er 5 kommentarer og
1 løsning

Onclick på baggrund

Hej Eksperter

Har et spørgsmål, hvorfor kan jeg ikke få det her til at virke.

<table>
<tr>
<td>
<img id="mark" style="background-color:#333" width="640" height="480" onclick="placer()" />

<img id="ko" style="background-color:#03C; position:absolute; left:650px; top:100px;" width="259" height="218" />

<img id="gris" style="background-color: #399; position:absolute; left:50px; top:100px; visibility:hidden" width="91" height="57" />

<img id="hest" style="background-color: #996; position:absolute; left:50px; top:100px; visibility:hidden" width="200" height="165" />
</td>
<td valign="top">
<form name="indstillinger">
Næste billede<br />
z-indeks: <input type="text" name="zIndeks" size="2" value="1" /><br />
Det næste dyr er:
</form>
</td>
</tr>
</table>
<script language="javascript" type="text/javascript">
pos = 0;
dyr = new Array();
dyr[0] = ko;
dyr[1] = gris;
dyr[2] = hest;

function placer(){
    if (pos >= dyr.lenght){
        alert('Der er ikke flere dyr');
        return;
    }
    aktuelt_dyr = dyr[pos];
    aktuelt_dyr.style.left = window.event.x;
    aktuelt_dyr.style.top = window.event.y;
    aktuelt_dyr.style.zIndex = instillinger.zindex.value;
   
    if (pos + 1 < dyr.length){
        naeste_dyr = dyr[pos+1];
        naeste_dyr.style.left = 650;
        naeste_dyr.style.top = 100;
        naeste_dyr.style.visibility = 'visible';
    }
    pos++;
}
   
</script>

Jeg er ved at lære at kode i javascript, og det er første gang jeg prøver dette.

Opgaven går ud på at få feks. ko til at placere der hvor man trykker på baggrunden. Men der sker ikke noget, har prøvet at gå koden igennem flere gange men kan simpelhen ikke finde fejlen.

Jeg læser og prøver at lære igennem bogen javascript programmering en dansk bog af Kristian Hansen

Med venlig hilsen
Morten
Avatar billede Morten Professor
10. april 2017 - 10:53 #1
(pos >= dyr.lenght) = (pos >= dyr.length) er rettet men virker stadig ikke
Avatar billede olsensweb.dk Ekspert
10. april 2017 - 11:59 #2
>if (pos >= dyr.lenght){
bliver aldrig sandt grundet stavefejl lenght skal være length, som du selv skriver

min debugger i chrome siger "instillinger is not defined"
denne linje "aktuelt_dyr.style.zIndex = instillinger.zindex.value;"
jeg tror det er nemmere at bruge aktuelt_dyr.style.zIndex = document.getElementById('zIndeks').value; og give dit indput et id


forskel på store og små bogstaver
zIndeks er ikke det sammen som zindex



<table>
<tr>
<td>
<img id="mark" style="background-color:#333" width="640" height="480" onclick="placer()" />

<img id="ko" style="background-color:#03C; position:absolute; left:650px; top:100px;" width="259" height="218" />

<img id="gris" style="background-color: #399; position:absolute; left:50px; top:100px; visibility:hidden" width="91" height="57" />

<img id="hest" style="background-color: #996; position:absolute; left:50px; top:100px; visibility:hidden" width="200" height="165" />
</td>
<td valign="top">
<form name="indstillinger">
Næste billede<br />


           
z-indeks: <input type="text" name="zIndeks" id="zIndeks" size="2" value="1" /><br />
Det næste dyr er:
</form>
</td>
</tr>
</table>
<script type="text/javascript">
pos = 0;
dyr = new Array();
dyr[0] = ko;
dyr[1] = gris;
dyr[2] = hest;

function placer(){
    if (pos >= dyr.length){
        alert('Der er ikke flere dyr');
        return;
    }
    aktuelt_dyr = dyr[pos];   
    aktuelt_dyr.style.left = window.event.x;
    aktuelt_dyr.style.top = window.event.y;   
    aktuelt_dyr.style.zIndex = document.getElementById('zIndeks').value;   
    if (pos + 1 < dyr.length){
        naeste_dyr = dyr[pos+1];
        naeste_dyr.style.left = 650;
        naeste_dyr.style.top = 100;
        naeste_dyr.style.visibility = 'visible';
    }
    pos++;
}   
</script>
Avatar billede Morten Professor
10. april 2017 - 13:42 #3
Det virker nu, tak skal du have, og tak fordi du skriver hvor mine fejl var.
Den med document.getElementById havde jeg ikke set før, er også meget ny i det.
Men kan godt se ideen i at bruge den, for så henter den fra id i image, er det rigtig nok forstået?
Avatar billede Morten Professor
10. april 2017 - 13:43 #4
<img id="hest" var hvad jeg mente
Avatar billede Morten Professor
10. april 2017 - 13:53 #5
Hej

Jeg ved godt det er lidt et andet spørgsmål, men det er også en jeg har kæmpet med det er et heste løb der ikke vil starte.

<img id="hest1" src="../farver_og_grafik/tal0.gif" alt="Øverste hest" width="200" height="165" style="position:absolute; left: 10px; top:100px" />
<img id="hest2" src="../farver_og_grafik/tal0.gif" alt="Nederste hest" width="200" height="165" style="position:absolute; left: 10px; top:300px" />

<img alt="Målflag" width="78" height="64" style="position:absolute; left: 860px; top:10px; background-color:#000000;" />

<img alt="Mållinje" width="1" height="400" style="position:absolute; left: 900px; top:10px; background-color:#000000;" />

<img src="../farver_og_grafik/knap_ned.gif" alt="Startpistol" width="82" height="80" style="position:absolute; left: 410px; top:500px" onclick="startLob()" />
<script language="javascript" type="text/javascript">
timeout1 = 0;
timeout2 = 0;

function startLob(){
    flytHest1();
    flytHest2();
}
function flytHest1(){
    position = parseInt(hest1.style.left) + 1;
    hest1.style.left = position;
    timeout1 = setTimeout('flytHest1()', Math.random() * 200);
    kontrollerMaal();
}
function flytHest2(){
    position = parseInt(hest2.style.left) + 1;
    hest2.style.left = position;
    timeout2 = setTimeout('flytHest2()', Math.random() * 200);
    kontrollerMaal();
}
function kontrollerMaal(){
    position1 = parseInt(hest1.style.left);
    position2 = parseInt(hest2.style.left);
   
    if (position1 >= 704 || position2 >= 704){
        clearTimeout(timeout1);
        clearTimeout(timeout2);
       
        if (position1 >= 704){
            alert('Den øverste hest har vundet');
        } else {
            alert('Den nederste hest har vundet');
        }
    }
}
</script>

Kan ikke se fejlen?

Og den debugger i crome hvor finder jeg den??
Avatar billede olsensweb.dk Ekspert
10. april 2017 - 14:08 #6
>Den med document.getElementById havde jeg ikke set før,
det er det mest anvendte, da et id skal være uniquet på siden

>for så henter den fra id i image, er det rigtig nok forstået?
den henter hele elementet
https://www.w3schools.com/jsref/met_document_getelementbyid.asp
https://www.w3schools.com/js/js_htmldom_elements.asp


kig på dine developer tools i din browser (F12)
især med JS er det u-undværligt
evt installer en add-on til din browser

chrome
google chrome developer tools

firefox
google firefox developer tools
google firefox firebug
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

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