2013-11-12 3 views
1

Я делаю этот плагинMouseLeave срабатывает, когда мышь находится внутри диапазона

HTML

<span class="item" data-item="first"> 
</span> 
    <br><br> 
<span class="item" data-item="second"> 
</span> 
<br><br> 
<span class="item" data-item="third"> 

Jquery

(function($){ 
    $.fn.myPlugin = function(){ 
    $(this).on('mouseleave', function(){ 
      var item = $(this).attr('data-item'); 
      alert(item);   
     });  

    return this.each(function() {  
     for (var i = 1; i <= 2; i++) { 
     $(this).append('<span class="act" title="active '+i+'">act'+i+'</span>'); 
     } 
    }); 
    }; 
})(jQuery); 



$(document).ready(function() { 
    $('.item').myPlugin(); 
}); 

Проблема заключается в том, когда я зависать между двумя динамически создаваемых элементов MouseLeave пожаров, даже если Я внутри класса предметов. Demo http://jsbin.com/IWutoQa/9/

Попробуйте переместить мышь между СИГН.1 & act2

+0

http://api.jquery.com/event.stopPropagation/? – mplungjan

+0

@mplungjan все еще стреляет после остановкиPropagation – Ace

ответ

3

Это происходит из-за margin-left: 10px! Вместо этого используйте padding-left: 10px, и он будет работать правильно.

Пример: jsfiddle

+0

это сработало tnx .. но я хочу знать y событие стреляет, когда я внутри диапазона – Ace

+0

@Ace Вы больше не находитесь в промежутке! Маржа создает пробелы ** вне ** фактического элемента; обивка ** внутри **. Посмотрите пример [margin] (http://jsfiddle.net/sKc6T/1/). Он использует margin (как ваш), но с границами. Таким образом, вы можете видеть, что существует пробел между пробелами (-> событие 'mouseleve'). Если вы сравните его с примером [padding example] (http://jsfiddle.net/sKc6T/2/) (например, мое решение), вы увидите, что между промежутками больше нет пробелов (-> событие mouseleve не уволен) – lionheart98

+0

эй tnx, хорошее объяснение – Ace

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