Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   пауза при наведении - поясните пожалуйста (https://javascript.ru/forum/events/67922-pauza-pri-navedenii-poyasnite-pozhalujjsta.html)

greenwar 15.03.2017 16:12

пауза при наведении - поясните пожалуйста
 
вот есть такая ф-я:
$(function()
{
    var MenuShowTimer;
    $('.wait05').hover(
    function(e)
    {
        MenuShowTimer = setTimeout(
        (function(Obj)
        {
            return function() {$(Obj).next().fadeIn();}; // то что должно происходить
        }) (this),1000)
    },
    // mouse leave сбрасывает таймер
    function(e)
    {
        clearTimeout(MenuShowTimer);
        $(this).next().fadeOut(); // то что должно происходить
    }
    );
});


а вопрос такой - почему эта часть:
$('.wait05').hover(
    function(e)
    {
        MenuShowTimer = setTimeout(
        (function(Obj)
        {
            return function() {$(Obj).next().fadeIn();}; // то что должно происходить
        }) (this),1000)


...не работает (пауза отсутствует) в таком виде:
$('.wait05').hover(
    function(e)
    {
        MenuShowTimer = setTimeout(
        (function(Obj)
        {
            return some_function(e);
        }) (this),1000)

или даже в таком:
$('.wait05').hover(
    function(e)
    {
        MenuShowTimer = setTimeout(
        (some_function(e)) (this),1000)

т.е. хотелось бы сократить и вынести во внешнюю ф-ю, но не выходит почему-то
работает только через
return function() {some_function(e);}

ksa 16.03.2017 08:51

Цитата:

Сообщение от greenwar (Сообщение 447452)
...не работает (пауза отсутствует) в таком виде:
$('.wait05').hover(
    function(e)
    {
        MenuShowTimer = setTimeout(
        (function(Obj)
        {
            return some_function(e);
        }) (this),1000)

Потому как функция
some_function(e)

выполняется сразу, кагбэ готовя другую функцию для setTimeout()...
Т.е. ты просто не понимаешь сам что написал.
Вот если бы
some_function(e)

возвращала бы функцию для setTimeout(), тогда бы та функция выполнилась после паузы...
Цитата:

Сообщение от greenwar (Сообщение 447452)
или даже в таком:
$('.wait05').hover(
    function(e)
    {
        MenuShowTimer = setTimeout(
        (some_function(e)) (this),1000)

Ну, а это вообще без комментариев... :haha:

ksa 16.03.2017 09:01

Цитата:

Сообщение от greenwar
хотелось бы сократить и вынести во внешнюю ф-ю

Вот тебе статейка на эту тему...
https://learn.javascript.ru/bind


Часовой пояс GMT +3, время: 02:17.