Функция setTimeout не вызывается?

#javascript

#javascript

Вопрос:

Чтобы установить задержку в меню при наведении курсора мыши, setTimeout является одним из вариантов. Но когда я пытаюсь это сделать, функция не вызывается.

HTML:

   <li><a href="#"  
         onmouseover="mopendelay('menu_proj')" 
  <li>
  

JavaScript:

 // open hidden layer
function mopen(id)
{   
    // cancel close timer
    mcancelclosetime();

    // close old layer
    if(ddmenuitem) ddmenuitem.style.visibility = 'hidden';

    // get new layer and show it
    ddmenuitem = document.getElementById(id);
    ddmenuitem.style.visibility = 'visible';

}

// delay menu open on mouseover
function mopendelay(id) 
{
    var delay = setTimeout(function(){
      alert('delay'); // isn't called
      mopen(id);
    }, 200);
    clearTimeout(delay);
}
  

Ответ №1:

Вы сбрасываете тайм-аут, прежде чем функция тайм-аута сможет выполняться.

 function mopendelay(id) 
{
    var delay = setTimeout(function(){
        mopen(id);
    }, 200);
}
  

Комментарии:

1. ОК. Спасибо за все ответы. Если я уберу время ожидания, оно сработает. Я также должен удалить инструкцию debug alert, чтобы получить правильный ответ.

Ответ №2:

Вы немедленно вызываете clearTimeout дескриптор, возвращаемый setTimeout . Почему это так? Я считаю, что код будет работать должным образом, если вы удалите это.

Ответ №3:

Вы вызываете clearTimeout сразу после этого. Для чего? Удалите эту строку, и она будет работать правильно.

Ответ №4:

Ваш чистый тайм-аут должен находиться за пределами функции, переданной в setTimeout