Avatar billede electrobeat_dk Nybegynder
23. marts 2007 - 13:30 Der er 14 kommentarer og
1 løsning

menu funktion

Jeg har et frameset med en top og main frame.. Jeg har så en menu i toppen som skal ændre sig alt efter hvilken side som er åbnet i main..

Når en side er åbnet skal den tilhørende menu knap vises fremhævet (mørkere blå), og det virker egentlig som det skal, bare lige på nær lige idet man åbner siden. Der er den aktive knap ikke fremhævet?

frame_top:
<script language="javascript" type="text/javascript">
var menu_curr;

function menu_shift(str)
{
    menu_prev = menu_curr;
    menu_curr = str;
   
    if(menu_prev) menu_mouse(document.getElementById('menu_img['+menu_prev+']'), true);
   
    menu_mouse(document.getElementById('menu_img['+menu_curr+']'));
}

function menu_mouse(img, mout)
{
    var reg_exp = new RegExp(/\[(.+)\]/);
    var id_arr = reg_exp.exec(img.id);
   
    if(id_arr[1] != menu_curr)
    {
        var reg_exp2 = new RegExp(/(.+\/)(.+)/);
        var src_arr = reg_exp2.exec(img.src);
        var src2_arr = src_arr[2].split('.');
        var src3_arr = src2_arr[1].split('-');
       
        var str = src_arr[1]+src2_arr[0]+'.'+src3_arr[0];
        if(!mout) str += '-2';
        str += '.'+src2_arr[2];
       
        img.src = str;
    }
}
</script>

<a href="'.$value.'.php"><img id="menu_img['.$value.']" src="gfx/menu.'.$value.'.png" onmouseover="menu_mouse(this)" onmouseout="menu_mouse(this, true)"></a>

frame_main:
<script language="javascript" type="text/javascript">
function menu_update()
{
    if(top.frame_top.loaded) top.frame_top.menu_shift('<?=$PAGE_ARR[0]?>');
    else setTimeout('menu_update()', 100);
}
menu_update();
</script>

Det kan ses her:
http://electrobeat.dk.linux17.wannafind.dk/v3/

Jeg ved måske godt at det ikke er helt hensigtsmæssigt med mine 2 reg exp, men det var lige den nemmeste løsning jeg kunne finde
Avatar billede roenving Novice
23. marts 2007 - 14:05 #1
window.onload = function(){menu_mouse(1);}; ?-)
Avatar billede electrobeat_dk Nybegynder
23. marts 2007 - 14:15 #2
hvad gør den og hvor skal jeg placere den?
Avatar billede roenving Novice
23. marts 2007 - 14:19 #3
Den udfører bare markering af menu 1 ved load !-)
Avatar billede electrobeat_dk Nybegynder
23. marts 2007 - 14:22 #4
jamen det burde den vel også gøre her?

<script language="javascript" type="text/javascript">
function menu_update()
{
    if(top.frame_top.loaded) top.frame_top.menu_shift('<?=$PAGE_ARR[0]?>');
    else setTimeout('menu_update()', 100);
}
menu_update();
</script>
Avatar billede electrobeat_dk Nybegynder
23. marts 2007 - 14:25 #5
desuden er det heller ikke sagt at det nødvendigvis er den første side som er åbnet :)
Avatar billede electrobeat_dk Nybegynder
25. marts 2007 - 21:10 #6
kan du løse problemet?

det er nemlig ikke sikkert at det er første menu knap der skal være aktiv
Avatar billede roenving Novice
25. marts 2007 - 22:39 #7
Gennemskue dit problem kan jeg så ikke ...
Avatar billede electrobeat_dk Nybegynder
26. marts 2007 - 19:48 #8
det må vel være fordi selve billedet ikke er loadet endnu i min menu_shift() funktion

kan man lave et "check" der vil fortælle om et billede eller element er loaded eller ej?
Avatar billede electrobeat_dk Nybegynder
26. marts 2007 - 19:58 #9
eneste mulighed er måske at lave en onload i selve img tag'et som sætter en værdi?
Avatar billede roenving Novice
27. marts 2007 - 05:50 #10
Det ville nok være det, jeg ville tænke i ...
Avatar billede electrobeat_dk Nybegynder
28. marts 2007 - 14:04 #11
jeg har prøvet nogle forskellige ting nu og får hele tiden fejl.. jeg er så kommet frem til noget nu hvor jeg ikke får fejl, men det virker stadig ikke

var menu_curr;
var menu_load = [];

function menu_shift(str)
{
    if(menu_load[str])
    {
        var menu_prev = menu_curr;
        menu_curr = str;
       
        if(menu_prev) menu_mouse(document.getElementById('menu_img['+menu_prev+']'), true);
       
        menu_mouse(document.getElementById('menu_img['+menu_curr+']'));
    }
    else setTimeout('menu_shift(\''+str+'\')', 100);
}

<a href="'.$value.'.php"><img id="menu_img['.$value.']" src="gfx/menu.'.$value.'.png" onload="menu_load[\''.$value.'\'] = true" onmouseover="menu_mouse(this)" onmouseout="menu_mouse(this, true)" onclick="blur()"></a>
Avatar billede roenving Novice
28. marts 2007 - 14:06 #12
Hvad laver de backslashes i else-tingen ?-)
Avatar billede electrobeat_dk Nybegynder
28. marts 2007 - 14:24 #13
jeg gik du fra det skulle se sådan ud..

jeg forstår i forvejen ikke hvad de quotes skal omkring selve funktionen, da det jo så bliver til en streng
Avatar billede roenving Novice
28. marts 2007 - 14:30 #14
Tjah, det er da også en måde at gøre det på ...

-- men det er præcis pointen med setTimeout, at funktionen evalueres på et fuldstændigt anderledes tidspunkt, og der er derfor ikke mening i rene funktionskald, medmindre det er indlejret i en rigtig (anonym) funktion ...

-- men det er mere overskueligt at benytte de to forskellige strengafgrænsere, man kan bruge i java script:

setTimeout('menu_shift("'+str+'")', 100);

-- men ellers har jeg ikke nogen god ide om hvad problemet er ...
Avatar billede electrobeat_dk Nybegynder
28. marts 2007 - 14:56 #15
hmm.. men tak for hjælpen :)

prøver at oprette et nyt spm
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