Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #16526

Re: Trouble with settimeout()

From joe <mt@invalid.com>
Newsgroups comp.lang.javascript
Subject Re: Trouble with settimeout()
Message-ID <vj9a785e7hh79uvoro851dfmr171dp5evd@4ax.com> (permalink)
References <9nn878d2mebc6rbrudoknmm4klm11nijkj@4ax.com> <k51r79$sj5$1@news.albasani.net>
Date 2012-10-10 10:42 +0300
Organization Elisa Customer

Show all headers | View raw


Can you elaborate further. No matter what I try teh best result I get is all sub
menus disappearing after the timeout is executed.


Stefan Weiss <krewecherl@gmail.com> wrote:

>On 2012-10-09 19:35, joe wrote:
>> Here's full working example of a vertical menu with sublevels. Whar I am trying
>> to achive is a time.out from the menu. ie when mouse-cursor leaves the menu item
>> it should not immediately disappear - it shout stay a 1000 msecs before
>> disappearing. My efforts with setTimeout are unsuccessfull.
>> 
>> In the code there is
>> 
>> ul_level[i].parentNode.onmouseout=function()
>> {this.getElementsByTagName("ul")[0].style.display="none";}
>
>When you post code on Usenet, please keep your lines short enough to
>prevent unintentional wrapping.
>
>> which I trying to delay a little. Unfortunately
>> 
>> ul_level[i].parentNode.onmouseout=function() {  
>>      timou=setTimeout(function() {
>> this.getElementsByTagName("ul")[0].style.display="none";},1000);   }
>> 
>> does not work. The menu just stays and does not go away after 100 msecs.
>
>You might have mentioned that you also get an error message at this
>point: "TypeError: Object [object Window] has no method
>'getElementsByTagName'".
>
>If you didn't get an error message, search the web for how to enable JS
>debugging in your browser. There should also be something in the FAQ
>about debuggers.
>
>When the timeout fires and your inner function is executed, "this"
>refers to the global object. You wanted it to refer to one of your menu
>elements, but that reference is gone now. You have to store the "this"
>value somewhere, so that the element reference is still available when
>the function is called:
>
>ul_level[i].parentNode.onmouseout = function() {
>    var that = this;
>    setTimeout(function() {
>        that.getElementsByTagName("ul")[0].style ...
>    }, 1000);
>}
>
>From what I've seen, you also need to add some code to clear the
>timeouts when the user moves between menu items.
>
>- stefan

Back to comp.lang.javascript | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

Trouble with settimeout() joe <mt@invalid.com> - 2012-10-09 20:35 +0300
  Re: Trouble with settimeout() Stefan Weiss <krewecherl@gmail.com> - 2012-10-09 20:42 +0200
    Re: Trouble with settimeout() joe <mt@invalid.com> - 2012-10-10 10:42 +0300

csiph-web