Avatar billede gregorian Nybegynder
14. november 2003 - 17:45 Der er 20 kommentarer og
1 løsning

brug for hjælp til forsinket hide function

vil gerne have at denne function bliver forsinket med ½ sec.
onMouseOut="ShowHide('hide','1');"



min java function:

function ShowHide (metode,id) {
        if (!document.all && document.getElementById) {   
            menu = document.getElementById(id).style;
        } else if(document.all && document.getElementById) {           
            menu = document.all(id).style;
        } else {    // !IE5 && !NS6
            return false;
        }
        if (metode == 'hide'){
          menu.visibility = 'hidden';
          menu.display = 'none';
        }
        if (metode == 'show'){
          menu.visibility = 'visible';
          menu.display = '';
        }
}


jeg har forsøgt mig med følgende setTimeout, dog ugen held ;/

onMouseOut="setTimeout('ShowHide('hide','1')', '50')"





hvad mangler jeg eller gør forkert?
Avatar billede spunk13 Nybegynder
14. november 2003 - 17:51 #1
onMouseOut="setTimeout('ShowHide(\'hide\',\'1\')', 50)"
Avatar billede grunken Nybegynder
14. november 2003 - 17:52 #2
lav en lille function eks.

function aktiver(str,num){
setTimeout("ShowHide(str,num)", 500);
}

og

onmoseout="aktiver('hide','1');"
Avatar billede spunk13 Nybegynder
14. november 2003 - 17:54 #3
.. og du skal nok ændre 50 til 500 hvis du vil have et halvt sekund :)
Avatar billede olebole Juniormester
14. november 2003 - 19:17 #4
<ole>

grunken >> Så har eksisterer de to variabler ikke, når timeout'en kalder funktionen 'ShowHide()'  :)
Prøv disse to tests:

<script type="text/JavaScript">
function aktiver(str,num){
    setTimeout("ShowHide(str,num)", 500);
}
function ShowHide(str,num) {
    alert(str+" :: "+num)
}
</script>
<button onclick="aktiver('noget', '12')">TEST</button>

... og:

<script type="text/JavaScript">
function aktiver(str,num){
    setTimeout("ShowHide('"+str+"','"+num+"')", 500);
}
function ShowHide(str,num) {
    alert(str+" :: "+num)
}
</script>
<button onclick="aktiver('noget', '12')">TEST</button>
</script>

/mvh
</bole>
Avatar billede grunken Nybegynder
14. november 2003 - 21:35 #5
Du har helt ret Ole, nogle gange er jeg en af dem der tager mig til hovedet af bare foragelse over at man kan udøve sådan noget juks....men set fra en anden synsvinkel, så blev det vist sat på plads en gang for alle :)
Avatar billede olebole Juniormester
14. november 2003 - 22:27 #6
Har jeg selv lavet den fejl mange gange ...?  ;o))
Avatar billede gregorian Nybegynder
14. november 2003 - 22:34 #7
Ser kanon ud drenge..

ik helt sikker på hvad i snakker om men har det problem lige nu at jeg ikke kan bruge den variabel, som "grunken" foreslår onmoseout="aktiver('hide','1');"

går ud fra det er det i taler om.. har ik så meget tid lige nu, så tjekker lige det du har skrevet imorgen OleBole. ( weird navn forresten ;) )

dog tror jeg helt klart det virker.
Avatar billede olebole Juniormester
14. november 2003 - 22:57 #8
Vis mig en Ole - og jeg garanterer dig, han er blevet kaldt OleBole. Der har sågar været en standard-læsebog i folkeskolen, der hed noget à la "Læs Med OleBole". Den var godt nok udgået få år, før jeg kom i skole  :)
... og så er der jo f.eks: "OleBole gik i skole, med sin søsters underkjole." ... det har jeg dog heller aldrig prøvet  ;oD
Avatar billede gregorian Nybegynder
15. november 2003 - 11:22 #9
;) hehe..
Sikker på det ole? ;)



nå, men nu virker det efter hensigten men har glemt en vigtig del:
den skal nulstille funktionen aktiver, når flytter musen til et andet felt som skal vise feltet igen. i øjeblikket stopper den ikke forsinkelsen.

koden ser sådan ud nu og virker dog ;)

function ShowHide (metode,id) {
        if (!document.all && document.getElementById) {   
            menu = document.getElementById(id).style;
        } else if(document.all && document.getElementById) {           
            menu = document.all(id).style;
        } else {    // !IE5 && !NS6
            return false;
        }
        if (metode == 'hide'){
          menu.visibility = 'hidden';
          menu.display = 'none';
        }
        if (metode == 'show'){
          menu.visibility = 'visible';
          menu.display = '';
        }
}
function aktiver(metode,id){
    setTimeout("ShowHide('"+metode+"','"+id+"')", 500);
}


nu skal functionen "aktiver" bare nulstilles eller stoppes når man aktiverer functionen "ShowHide", hvor metode = show.
hvad skal man skrive?

SetTimeout = null? eller? har simpelthen ingen ide
Avatar billede gregorian Nybegynder
15. november 2003 - 11:46 #10
clearTimeout(aktiver());

har simpelthen ingen ide... hvordan gør man!
Avatar billede olebole Juniormester
15. november 2003 - 12:00 #11
Ja, det er jeg mere end temmelig sikker på  ;o)

Start timeren:
  myTimer = setTimeout( ..... );
Stop timeren:
  clearTimeout(myTimer);
Men 'myTimer' skal være erlæret globalt (udenfor funktionerne) med:
  var myTimer;

Hvorfor bruger du i øvrigt både 'visibility' og 'display'? Det forekommer mig at være lidt overkill  :)
/mvh
Avatar billede gregorian Nybegynder
15. november 2003 - 12:04 #12
er ikke helt klar over hvorfor.. men har fået fortalt at visibility virker i ie og display i opera eller omvendt..


du mener ala:

function ShowHide (metode,id) {
        clearTimeout(myTimer);

        if (!document.all && document.getElementById) {   
            menu = document.getElementById(id).style;
        } else if(document.all && document.getElementById) {           
            menu = document.all(id).style;
        } else {    // !IE5 && !NS6
            return false;
        }
        if (metode == 'hide'){
          menu.visibility = 'hidden';
          menu.display = 'none';
        }
        if (metode == 'show'){
          menu.visibility = 'visible';
          menu.display = '';
        }
}
function aktiver(metode,id){
    myTimer = setTimeout("ShowHide('"+metode+"','"+id+"')", 500);
}
Avatar billede olebole Juniormester
15. november 2003 - 12:11 #13
Du kan rolig blot bruge enten 'display' eller 'hidden'. Opera forstår begge - og resultatet af de to ser jo vidt forskelligt ud  :)

Ja, dit eksempel er fint, men du skal som sagt skrive:
  var myTimer;
et sted udenfor funktionerne ... ellers kan de ikke 'dele' variablen 'miTimer'
Avatar billede olebole Juniormester
15. november 2003 - 12:12 #14
... 'display' eller 'visibility' ...  ;o)
Avatar billede gregorian Nybegynder
15. november 2003 - 12:19 #15
kanon ;) så virker det.

havde godt nok ikke troet det var så let at lave tak for hjælpen olebole og self os dig Grunken.


den færdige kode ser sådan ud hvis nogen ville have lyst til at bruge det en anden gang :

<script type="text/JavaScript">
var myTimer
function ShowHide (metode,id) {
        clearTimeout(myTimer);

        if (!document.all && document.getElementById) {   
            menu = document.getElementById(id).style;
        } else if(document.all && document.getElementById) {           
            menu = document.all(id).style;
        } else {    // !IE5 && !NS6
            return false;
        }
        if (metode == 'hide'){
          menu.visibility = 'hidden';
        }
        if (metode == 'show'){
          menu.visibility = 'visible';
        }
}
function aktiver(metode,id){
    myTimer = setTimeout("ShowHide('"+metode+"','"+id+"')", 750);
}
</script>


onMouseOver="ShowHide('show','1');"
onMouseOut="aktiver('hide','1');"

ville være rart hvis andre gjorde dette i bunden af deres spg os ;)

tak for hjælpen..
point udgivet og tråd lukket, når OleBole lige giver et endelig svar,
Avatar billede olebole Juniormester
15. november 2003 - 12:27 #16
Jamen, det gør jeg da gerne ... og selvtak  :)
/mvh
Avatar billede gregorian Nybegynder
15. november 2003 - 12:28 #17
;) hehe!
Avatar billede olebole Juniormester
15. november 2003 - 12:40 #18
For lige at prøve forskellen på globale og lokale variabler, kan du teste dette eksempel:

<script type="text/JavaScript">
var ib = "dreng"; // ib er en global variabel
function bla() {
    ib = "stadig dreng";
    alert("Ib: " + ib);
}
function blabla() {
    var ib = "noget andet"; // Denne ib er en lokal variabel
    alert("Ib: " + ib);
}
function checkIb() {
    alert("Ib: " + ib);
}
</script>

<button onclick="bla()">Kør bla()</button><br>
<button onclick="blabla()">Kør blabla()</button><br>
<button onclick="checkIb()">Kør checkIb()</button>

Leg lidt med knapperne, så kan du sikkert se, at bla() ændrer den globale variabel - i modsætning til blabla(), der ændrer sin lokale 'ib'.

Hvis du sletter den globale variabel, er det kun blabla(), der kan finde en 'ib' ... og det er dens lokale 'ib'  :)
/mvh
Avatar billede gregorian Nybegynder
15. november 2003 - 12:42 #19
smart... egentlig meget logisk.
Avatar billede olebole Juniormester
15. november 2003 - 12:48 #20
Nemlig ... og ang. den kommentar og din tidligere ("...havde godt nok ikke troet det var så let at lave..."), så er det ikke fordi, tingene er vanskelige, vi har svært ved dem. Det er fordi, vi tror, de er vanskelige  ;o)
/mvh
Avatar billede gregorian Nybegynder
15. november 2003 - 12:49 #21
^^ har du helt ret i
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