Вы можете отменить привязку обработчика события mouseleave, когда пользователь щелкает div
$(function() {
$('.block').live("mouseenter", function() {
var id = $(this).attr('id');
$('#' + id).show();
$(this).click(function() {
//show? is this how it works? not sure where click should go.
});
}).live("mouseleave", function() {
var id = $(this).attr('id');
$('#' + id).hide();
}).live("click",function(){
$(this).unbind("mouseleave");
$(this).removeClass('block'); //this was added
});
});
Попробуйте даже попробовать использовать $('.block').hover(function(){},function(){})
вместо индивидуальной обработки событий mouseover
и mouseleave
. Также еслиможно использовать делегирование вместо live
.Но это просто мнение, не связанное с вашим вопросом.
Редактировать: с делегатом.Обратите внимание, что для работы div.blocks должен иметь вид
<div id="container">
<div class="block">
<div class="block">
</div>
$('#container').delegate('.block', 'mouseenter', function() {
var id = $(this).attr('id');
$('.msg').html('I entered :' + id);
});
$('#container').delegate('.block', 'mouseleave', function() {
var id = $(this).attr('id');
$('.msg').html('I came out of :' + id);
});
$('#container').delegate('.block', 'click', function() {
var id = $(this).attr('id');
$('.msg').html('I entered and clicked :' + id);
$(this).unbind("mouseleave");
$(this).removeClass('block');
});
Также вам необходимо удалить блок класса из div, по которому щелкают, чтобы противостоять эффекту .live
или * 1014.*