2017-02-13 6 views
0

Я работаю над текущей работой над выпадающим меню, используя jQuery. У меня возникла проблема, когда функция Timeout не работает вообще. Код для этого является:Функция таймаута jQuery не работает

$(document).ready(function() { 
 
    $('.has-sub').hover(
 
    function() { 
 
     $('ul', this).stop(true, true).slideDown(500); 
 
    }, 
 
    function() { 
 
     $('ul', this).stop(true, true).slideUp(400); 
 
    }, 
 
    function() { 
 
     setTimeout(function() { 
 
     $('.has-sub').addClass("tap"); 
 
     }, 2000); 
 
    }, 
 
    function() { 
 
     $(this).removeClass("tap"); 
 
     clearTimeout(); 
 
    } 
 
); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

То, что я пытаюсь сделать, это создать задержку парения для родителя раскрывающийся. Вам нужно будет навести курсор на родителя в течение 2 секунд, чтобы выпадающее меню появилось. Я также хочу связать это с эффектом Slidedown и Slideup.

Функция Slidedown и Slideup работает правильно, но таймаут не работает.

+5

Еще раз, читая [документацию] (https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/clearTimeout) всегда полезно .. – Teemu

+0

, это означает, что вы используете jQuery для зависания не так, и setTimeout принадлежит JS .... – ymz

+3

Метод '.hover()' jQuery использует только 1 или 2 функции в качестве параметров. Вы даете это 4. https://api.jquery.com/hover/ – blex

ответ

1

Вы не можете просто позвонить clearTimeout() (который не является частью JQuery, кстати), вы должны предоставить ему идентификатор таймера, который Вы хотите отменить.

Также setTimeout() и clearTimeout() не являются частью JQuery или JavaScript. Это методы объекта window, который предоставляется браузером. Они не являются частью языка (JavaScript) или библиотеки (JQuery).

Кроме того, JQuery .hover() method принимает 2 аргумента, и вы обеспечиваете 4. Я совмещали их ниже, но не зная точно, что вы пытаетесь сделать, вам, возможно, потребуется настроить это.

$(document).ready(function() { 
 
    
 
    // This will represent the unique ID of the timer 
 
    // It must be declared in a scope that is accessible 
 
    // to any code that will use it 
 
    
 
    var timerID = null; 
 
    
 
    $('.has-sub').hover(
 
    function() { 
 
     
 
     // Clear any previously running timers, so 
 
     // we dont' wind up with multiples. If there aren't 
 
     // any, this code will do noting. 
 
     clearTimeout(timerID); 
 
     
 
     $('ul', this).stop(true, true).slideDown(500); 
 
     // Set the ID variable to the integer ID returned 
 
     // by setTimeout() 
 
     timerID = setTimeout(function() { 
 
     $('.has-sub').addClass("tap"); 
 
     }, 2000); 
 
    }, 
 
    function() { 
 
     $('ul', this).stop(true, true).slideUp(400); 
 
     $(this).removeClass("tap"); 
 
     // Clear the particular timer based on its ID 
 
     clearTimeout(timerID); 
 
    } 
 
); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

+2

см. Комментарий @blex – gaetanoM

+1

@gaetanoM Обновлено, чтобы обратиться к этому. –

+0

«но не зная точно, что вы пытаетесь сделать», это проблема. – gaetanoM

Смежные вопросы