Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Слои действия


Автор: SneG0K 17.4.2010, 12:38
Код

<div class="country_edit_window">
    <div class="header"><p class="title">Редактировать</p><div class="draggable"></div><img align="left" class="close_btn"></div>
    <div class="body">Тело</div>
    <div class="bottom"><div class="save">Сохранить</div><div class="close">Закрыть</div></div>
</div>

Это у нас модульное окно.
Хочу сделать его перетаскиваемым
Код

/* window drag interface */
$(".country_edit_window .header").mousedown(function(){
    alert('clicl');
});

Все бы вроде хорошо, хватаем за заголовок - тянем. Но
Код

$(".country_edit_window .close_btn").click(function(){
    $(".country_edit_window").animate({"opacity": 0, "left": "0", "top": "0"}, 300);
    $(".country_edit_window").css({"display": "none"});
});

Но там-же в заголовке есть еще и кнопка закрытия модульного окна. Т.е. получается, что обработчик кнопки закрытия переопределяется.
Как сделать так, чтоб обработчик не переопределялся?

Автор: Amphiluke 17.4.2010, 14:16
Можно ловить на кнопке закрытия событие onmousedown, а не click (первое происходит раньше), и в обработчике отменять всплытие.

Как-то так, что-ль.
Код

$(".country_edit_window .header").mousedown(function(){
    alert('clicl');
});
$(".country_edit_window .close_btn").mousedown(function(e){
    $(".country_edit_window").animate({"opacity": 0, "left": "0", "top": "0"}, 300);
    $(".country_edit_window").css({"display": "none"});
    if (e) {e.stopPropagation();} else {event.cancelBubble = true;}
});

Автор: Любитель 18.4.2010, 21:04
Ну само закрытие обрабатывать в клике - это логично. А вот отменять обработку события парентами - действительно надо. Единственное - такой код немного странен, так как e здесь - это jQuery-вская обёртка над ивентом ("браузерный" обхект ивента - e.originalEvent). Он передастся всегда. У него есть метод stopPropagation, который уже под IE установит cancelBubble.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)