2010-03-07 3 views
2

У меня есть этот код:JQuery: Не могу понять ошибку

$('.user_info').click(function(){ 
    var pos = $(this).offset(); 
    rel_value = $(this).attr('rel'); 

    $('#' + rel_value).css({top: pos.top + 'px', left: pos.left + 'px'}); 
    $('#' + rel_value).show('slow'); 

    $('#' + rel_value).hover(function(){}, function(){ 
     $(this).fadeOut('slow'); 
    }); 

    return false; 
}); 

Когда я нажимаю на ссылку с классом user_info, он показывает ДИВ идентифицируются '#' + rel_value. Проблема в том, что div показывает, но в то же время исчезает ($(this).fadeOut('slow');), хотя я указал это в параметре mouseout.

Что я хочу, так это то, что div должен уходить только тогда, когда мышь покидает свою область. Как это сделать?

Благодаря

Edit:

Странно, тот же код работает на jsbin, но не на моей странице: JQuery версия также то же самое.

http://jsbin.com/epifu3

+0

Странно, тот же код работает на jsbin, но не на моей странице: версия jquery также такая же. http://jsbin.com/epifu3 – Sarfraz

+0

Код, который у вас есть, отлично работает для меня в Firefox, IE и Chrome. Версия jsbin работает как в режиме онлайн, так и когда я вытащил код и запустил его на своем рабочем столе. Может быть, у вас есть что-то еще, мешающее? У вас есть код в другом месте страницы, который также использует одни и те же элементы? – Mottie

+0

напишите свой html-код, пожалуйста. – pixeline

ответ

2

это нормально, что он исчезает, потому что, когда вы нажимаете на элемент 1, ваша мышь находится на элементе1, поэтому не на элементе2 ('#' + rel_value).

Попробуйте это вместо этого: добавьте класс (пример: «tobeShown») ко всем элементам, у которых есть идентификатор, который вы установили обычно через свой '#' + rel_value, и приложите к ним поведение hover() отдельно от вашей функции щелчка.

$('.tobeShown').hover(function(){}, function(){ 
     $(this).fadeOut('slow'); 
    }); 

$('.user_info').click(function(){ 
    var pos = $(this).offset(); 
    rel_value = $(this).attr('rel'); 

    $('#' + rel_value).css({top: pos.top + 'px', left: pos.left + 'px'}); 
    $('#' + rel_value).show('slow'); 
    return false; 
}); 
+0

это тоже не сработало. Странно, тот же код работает на jsbin, но не на моей странице: версия jquery также такая же. http://jsbin.com/epifu3 – Sarfraz

+0

look: установка события mouseout внутри события click просто неверно: подумайте об этом. Каждый раз, когда пользователь нажимает на ваш элемент, он будет воссоздавать функцию и привязку. Не очень эффективно. Я пробовал свой код, и он работает на jsbin: http://jsbin.com/epifu3/2/, как и для вашей страницы, вы должны поместить его в Интернет.Нет ничего магического: в нем должна быть ошибка, так как вы говорите, что это работает на jsbin. – pixeline

0

Вы пробовали заменить hover с mouseleave?

+0

да даже попробовал, но тот же результат – Sarfraz

+0

У вас есть ссылка на живую страницу, демонстрирующую проблему? Я хотел бы отладить его с помощью firebug – Tarski

+0

Странно, тот же код работает на jsbin, но не на моей странице: версия jquery также такая же. http://jsbin.com/epifu3 – Sarfraz

0

.hover() огни для любого контейнера также оставляют действие, это эквивалентно mouseleave в вашем случае. Пробовали ли вы ваниль .mouseout()?

$('#' + rel_value).mouseout(function(){ 
    $(this).fadeOut('slow'); 
}); 

Трудно точно сказать, не видя разметку, но не с помощью пользовательского события JQuery для этого, кажется, больше того, что вы после этого.

+0

Пробовал это тоже. Странно, тот же код работает на jsbin, но не на моей странице: версия jquery также такая же. http://jsbin.com/epifu3 – Sarfraz

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