Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Неверно срабатывает bind (https://javascript.ru/forum/jquery/9098-neverno-srabatyvaet-bind.html)

Dastin 28.04.2010 21:02

Неверно срабатывает bind
 
Здравствуйте.
Почему не работает следующий код?
$().ready(function() {
			$('body')
			.append('<div id="pf_search" style="width:262px; border:1px solid grey;">Hello!</div>')
			.click(function(){
				$('#pf_search').hide();
				$('body').unbind('click');
			});
			$('#pf_name').click(function(){
				$('#pf_search').slideDown('fast');
				$('body').click(function(){
					$('#pf_search').hide();
					$('body').unbind('click');
				});
			});
		});

Первый клик на body обрабатывается. Следующий клик на pf_name раскрывает pf_search, но клик на body его уже не прячет. pf_search прячется только при клике на pf_name, xотя обработчик стоит на body.

e1f 29.04.2010 10:29

$('body').click(function(){$(this).unbind('click') }); -- говноидея.

$(function() {
    $('body').
        append('<div id="pf_search" style="width:262px; border:1px solid grey;">Hello!</div>').
        one('click', function(){
            $('#pf_search').hide();
        });

        $('#pf_name').click(function(){
            $('#pf_search').slideDown('fast');

            $('body').one('click', function(){
                $('#pf_search').hide();
            });
        });
});


Так работает?

Dastin 29.04.2010 11:50

Нет, если не вешать one на body в callback SlideDown :) Решение в этом.

А за подсказку с one - спасибо )


Часовой пояс GMT +3, время: 05:22.