2013-10-11 4 views
2

http://jsfiddle.net/yZSEA/парения не работает с MouseLeave

$("p").hover(function() { 
    var $this = $(this).find('span'); 
    $this.show(); 
}, function() { 
    $this.hide(); 
}); 

Я не хочу использовать MouseEnter и MouseLeave, чтобы избежать уродливые код, идея выше дается в Jquery документации, логически это нормально, но MouseLeave часть Didn 't work

+0

'$ this' не установлен во второй функции - попробуйте' $ (это) .hide() ' – SmokeyPHP

+0

Это происходит потому, что в' '$ mouseleave' this' не задавать. – putvande

ответ

3

Вы не определили $this в вашей функции mouseleave и ваш код брошен ING:

Uncaught ReferenceError: $this is not defined

Просто повторить var $this заявление в MouseLeave функции:

$("p").hover(function(){ 
    var $this = $(this).find('span'); 
    $this.show(); 
}, function(){ 
    var $this = $(this).find('span'); 
    $this.hide(); 
}); 

Working JSFiddle demo.

+0

Полезно ли использовать имя переменной? –

+0

может var $ this из 1-й функции быть доступным во 2-й? –

+0

'$ this' является локальным для каждой функции. Это означает, что вторая функция не может получить к ней доступ. Вам действительно не нужно объявлять переменную в вашем примере, однако вы можете просто просто вызвать '$ (this) .find ('span'). Show()' и '$ (this) .find ('span') .hide() '. –

2

Это потому, что $this в контексте обработчика mouseleave является undefined, вы также должны определить переменную в этом обработчике.

Вы также можете использовать on и toggle методы (, если это не безобразно):

$("p").on('mouseenter mouseleave', function(e) { 
    $('span', this).toggle(e.type === 'mouseenter'); 
}); 
0

$this не объявлен в вашем MouseOut области. Просто сделайте .find вызов снова в мышь из обработчика:

$("p").hover(function(){ 
    $(this).find('span').show(); 
     }, function(){ 
      $(this).find('span').hide(); 
    } 
); 
0

добавить var $this = $(this).find('span'); еще раз, когда MouseLeave произойдет

$("p").hover(function(){ 
var $this = $(this).find('span'); 
$this.show(); 
    }, function(){ 
     var $this = $(this).find('span'); 
     $this.hide(); 
}); 
0
$("p").hover(function(){ 
    var $this = $(this).find('span'); 
    $this.show(); 
     }, function(){ 
      var $this = $(this).find('span'); 
    $this.hide(); 
    } 
); 
0

добавить $ это в вашу функцию отпуска также:

$("p").hover(function(){ 
     var $this = $(this).find('span'); 
     $this.show(); 
    }, function(){ 
      var $this = $(this).find('span'); 
      $this.hide(); 
    } 
); 
0
$('p').hover(function() { 
     $(this).find('span').show(); 

      },function() { 

    $(this).find('span').hide(); 
    }); 

Demo

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