www.webdeveloper.com
Results 1 to 2 of 2

Thread: Array and setTimeout -- stymied

  1. #1
    Join Date
    Sep 2009
    Posts
    4

    Array and setTimeout -- stymied

    Hello folks,

    I am stymied by the behavior of the following code fragment. It actually works in IE5, but I get error messages in FF3:

    ==================
    in <head>
    ==================
    function timingloop(itemarray,opast,opaend, speed,steps, diff,loops)
    {
    ib=0;
    jb=0;
    var ti=[];
    var tp=[];

    loops--;
    //alert(loops);
    for( jb=0;jb<=3;jb++){
    for( ib=0;ib<=2;ib++){
    alert('itemarray ='+ib + itemarray[ib]);
    ti[ib]=setTimeout("zxcEleOpacity("+itemarray[ib]+","+opaend+","+opast+","+speed+","+steps+")",diff+1000+ib*8000+jb*30000);
    tp[ib]=setTimeout("zxcEleOpacity("+itemarray[ib]+","+opaend+","+opast+","+speed+","+steps+")",diff+5000*ib+8000+jb*30000);
    }
    }
    }


    ==================
    in <body>:
    ==================

    <body>onload="zxcEleOpacity('Test1',10),zxcEleOpacity('Test2',10),zxcEleOpacity('Test3',10)" style="background-color:black">



    <div id="Test1" style="position:relative;width:200px;height:150px;" >
    <img alt="" src="columbine_1.jpg" />
    </div>

    <div id="Test2" style="position:absolute;width:200px;height:150px;left:200px;top=400px" >
    <img alt="" src="DSCF0076.jpg" />
    </div>


    <div id="Test3" style="position:absolute;width:200px;height:150px;left:400px;top=200px" >
    <img alt="" src="DSCF0185.jpg" />
    </div>

    <script type="text/javascript">


    var itemarray = [];
    itemarray[0]='Test1';
    itemarray[1]='Test2';
    itemarray[2]='Test3';

    alert(itemarray[0]);
    alert(itemarray[1]);
    alert(itemarray[2]);
    alert('array size = '+itemarray.length);


    //zxcEleOpacity('Test1',0);
    //zxcEleOpacity('Test2',0);
    //initial display



    timingloop(itemarray,0,100,1000,10,1000,5);

    ====================

    The "zxc" functions are from a script I got on the web.

    The idea is simple: I have a few elements on the page (with ids 'Test1', 'Test2', etc. whose appearance (opacity I want to change.

    I am setting up an array with the IDs (itemarray), and pass that into a function (timingloop), which calls setTimeout a few times to effect the opacity changes. I think the problem is in the way that I am trying to pass the arguments to the xcEleOpacity() function in the setTimeout function. The function takes 5 parmameters, of which the first one is the Id of the element. FF3 reports an error: 'Test1 is not defined'. IE5 does not report back an error and runs the script the way I want it.

    It's probably the way I need to format the arguments for the setTimeout function, but I have tried numerous different ways, and I can't figure it out.

    Thanks for your help.

  2. #2
    Join Date
    Sep 2009
    Posts
    4
    Ok, quick update:

    I just found out about "closure" and tried this:

    ti[ib]=setTimeout(function(){zxcEleOpacity(itemarray[ib],opast,opaend,speed,steps)},diff+1000+ib*8000+jb*30000);

    Errors in both IE5 and FF3.

    Then I tried

    ti[ib]=setTimeout(function(){zxcEleOpacity('Test1',opast,opaend,speed,steps)},diff+1000+ib*8000+jb*30000);

    and it works in both FF3 and IE5 !!!

    Now, how do I pass the value of itemarray[1] to the function? I have tried to enclose itemarray[ib] in quotationmarks (which does not amke sense to me) and it doesn't work.

    Also, I heard that the "closure" can lead to a memory leak, which can be prevented by declaring the parameter=null. Do I have to do that for each parameter separately, or is "parameter=null" sufficient for all parmaters?

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles