Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   2 события, 1 действие (https://javascript.ru/forum/jquery/18092-2-sobytiya-1-dejjstvie.html)

Freakmeister 16.06.2011 21:11

2 события, 1 действие
 
<div class="green_message"><a href="#">x</a><p>Сообщение</p></div>

Код:

.green_message {
background-color: #AEFFAE;
border: 1px solid green;
display: none;
}
.green_message p {
padding: 8px;
}
.green_message a {
float: right;
margin-right: 3px;
cursor: pointer;
text-decoration: none;
color: #333333;
}
.green_message a:hover {
color: green;
text-decoration: none;
}

function hideMessage() {
    alert('функция вызвана'); //добавлено для наглядности. функция вызывается явно раньше delay('3000');
    $('.green_message').hide('blind', 700);
};

$('.green_message').fadeIn(700, function(){
    $(this).delay('3000');
    hideMessage();
});

$('.green_message a').click(function(event){
    event.preventDefault();
    hideMessage();
});

Пытаюсь сделать всплывающее окошко c сообщением в стиле ютуба, чтобы оно само закрывалось через 3 секунды, или чтобы его можно было закрыть крестиком. Для скрытия использую эффект "blind" из jQuery_UI. Проблема в том, чтобы предотвратить выполнение функции второй раз. Сейчас если нажать крестик - анимация скрытия блока происходит 2 раза. Пробовал извращаться с глобальной булевой переменной, ничего не вышло. Нид хэлп. =\ Может как-то сделать delay другим способом?

SkyLight 16.06.2011 22:10

setTimeout(hideMessage, 3000)

Sweet 16.06.2011 22:41

Используй .delay

Freakmeister 17.06.2011 09:42

А я что использую?)

walik 17.06.2011 12:00

Так используй delay:
$(this).delay('3000').hideMessage();

а не
$(this).delay('3000');
    hideMessage();

Freakmeister 21.06.2011 14:16

$(this).delay('3000').hideMessage();
не работает.
hideMessage это функция, а не метод, к ней нельзя обращаться таким образом.

Сделал так, вроде работает:

var canHide=true;
function hideMessage() {
    if (canHide) {
    $('.green_message').hide('blind', 700);
    }
    canHide=false;
};

$('.green_message').fadeIn(700, function() {
    setTimeout(hideMessage, 3000);
});

$('.green_message a').click(function(event) {
    hideMessage();
    event.preventDefault();
});


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