2013-09-30 4 views
1
$('.pallete').hide(); 
$(document).delegate('.pick', 'click', function() { 
    var pos = $(this).offset(); 
    var x = pos.left - $(window).scrollLeft() + $(this).width(); 
    var y = pos.top - $(window).scrollTop() + $(this).height(); 
    $('.pallete').css({ 
    top: y + "px", 
    left: x + "px", 
    }).show(); 
}); 

$(document).delegate('.col', 'click', function() { 
    var pos = $(this).css('background-color'); 
    $('.pick').css('background-color', pos); 
    $(this).parents('div').fadeOut(); 
}); 

Вот скрипка, http://jsfiddle.net/zPNk3/5/. Проблема заключается в том, что когда я нажимаю первый раз на элементе .pick, элемент '.palette' отображается правильно. Но когда я нажимаю в следующий раз то же самое не работает.Переключение абсолютного DIV не работает после первого раза

ответ

5

Когда вы делаете $(this).parents('div').fadeOut(), вы исчезаете все<div> родителей элемента. Вы показываете только .pallete.

Try:

$(this).closest('.pallete').fadeOut(); 

It works!

+0

Спасибо большое за ответ. Я был в небольшом замешательстве, что самые близкие могут также рассматривать элементы родного брата, я не использовал его. Но, увидев этот ответ, мои сомнения очищены. Еще раз спасибо. – Exception

+0

Вы можете сделать $ (this) .parents ('. Pallete'). FadeOut(); который будет работать только с родительскими элементами с классом pallete. Или даже: $ (this) .parents ('. Pallete'). First(). FadeOut(); – Paulina

+0

@paulina: За исключением '.closest()' является наиболее правильным, поэтому я использую это. Это точно так же, как '$ (this) .parents ('. Pallete'). First()', кстати. – Ryan

1

enter image description here

Посмотрите на строку DIV, который не должен быть скрыт,

$(document).delegate('.col', 'click', function() { 
    var pos = $(this).css('background-color'); 
    $('.pick').css('background-color', pos); 
    //$(this).parents('div').fadeOut(); // this is wrong 
    $(this).parent().parent().fadeOut(); // fixed 
}); 
Смежные вопросы