2016-10-29 2 views
0

У меня есть следующий код JQuery:Jquery MouseLeave SetTimeout не работает

$(".name") 
    .on("mouseenter", function() { 
    $(this).find("ul").css({"font-size": "20px", 
    'color': "red"}); 
    }) 
    .on("mouseleave", function() { 
    setTimeout(function() { 
     $(this).find("ul").css({"font-size": "12px", 
     'color': "blue"}); 
    }, 5000); 
    }); 

Первая часть работает, но вторая часть нарушается.

Почему setTimeout не работает mouseleave?

+0

'this' решает как не то, что нужно. – vlaz

ответ

3

Это проблема обзорной. $(this) внутри setTimeout не относится к $('.name'). Вы можете исправить это, установив переменную для this на правильном уровне и ссылаясь на это.

.on("mouseleave", function() { 

    var self = $(this); 

    setTimeout(function() { 
     self.find("ul").css({ 
      "font-size": "12px", 
      'color': "blue" 
     }); 
    }, 5000); 
}); 
0

Вместо $ (это), попробуйте передать в случае в качестве аргумента и использовать $ (event.target)

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