2010-08-01 2 views
0

Я не могу остановить глупую вещь от стрельбы из-за события, парящего над детьми предмета. Я хочу, чтобы событие срабатывало только через элемент div.item, а не div.itemChild. Это сводит меня с ума, пожалуйста, помогите.stop jquery live from hooking all the children

event.stopPropigation не работает. ни if(!$(event.source).is('itemChild')), по какой-то причине is() всегда бывает.

HTML

<div id="items"> 
    <div class="item"> 
     <div class="itemChild"> 
     </div> 
     <div class="itemChild"> 
     </div> 
    </div> 
</div> 

JS

//on hover event for each post 
$('div.item', '#items').live('mouseover mouseout', function(event){ 
    if (event.type == 'mouseover'){ 
     //fire mouseover handler 
    } 
    else{ 
     //fire mouseout handler 
    } 
}); 

Есть ли способ, чтобы остановить жить от стрельбы при наведении детей div.item?

Кстати дети div.item полностью покрывают его.

В основном я хочу, чтобы это действовало как .hover(), но привязывалось к вещам, загружаемым через ajax.

+1

'стоп JQuery в прямом эфире из зацепив все children.' - Это звучит как вопрос защиты детей. –

+0

ха-ха-ха, да не шучу. –

ответ

2

Это не является обязательным для детей. Он подходит к родителям.

Кроме того, ваш синтаксис неверен. Это:..

$("div.item", "div.items")... 

говорит «найти меня все див с классом элементом, которые являются потомками дивы с классом предметов Но у вас нет таких див (с позициями класса) У вас есть DIV с идентификатором пункты

Объединяя все это попробовать:.

$("#items div").live("mouseover mouseout", function(event) { 
    if ($(event.source).hasClass("itemChild")) { 
    return false; 
    } else if (event.type == "mouseover") { 
    ... 
    } else { 
    ... 
    } 
}); 

или, альтернативно:

В принципе, существует много способов скрыть эту кошку, но, как я сказал в первом предложении, вам нужно понять, что события пузырятся до тех пор, пока обработчики не прекратят распространение, либо напрямую (путем вызова event.stopPropagation(), либо путем возврата false из обработчика события, который эквивалент event.stopPropagation(); event.preventDefault();).

Кроме того, если вы делаете mouseenter и mouseout вы можете также просто использовать hover() событие, которое делает как те:

$("#items > div.item").live("hover", function(event) { 
    // mouseenter 
}, function(event) { 
    // mouseout 
}); 
+0

Thats not very helpful –

+3

@Robert ничего себе, downvoting люди пытаются помочь вам. способ получить вообще никакой помощи. – cletus

+0

Да, хорошо, что у вас не было ничего полезного в вашем посте, когда я проголосовал за него. С тех пор вы добавили больше, и я удалил голос. Спасибо. –