Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вопрос по jquery. Одновременно выполняющиеся события. как запретить одно? (https://javascript.ru/forum/misc/26785-vopros-po-jquery-odnovremenno-vypolnyayushhiesya-sobytiya-kak-zapretit-odno.html)

vuler 22.03.2012 10:41

вопрос по jquery. Одновременно выполняющиеся события. как запретить одно?
 
Есть обработчики события
$(document).on('change', '.selector_detail_type',select_dop_punkt);
$(document).on('click', hide_block);

выделяет пункт
function select_dop_punkt()
{
....
}

Скрывает весь блок с пунктами
function hide_block()
{
$('.title_main').hide();
}

Проблема в том, что при клике на пункте сразу запускается 2 обработчика. Один выбирает пункт, другой закрывает весь блок. А нужно чтобы второй обработчик, проверил был ли нажат первый пункт и если был, то останавливал свое выполнение.
Единственный вариант - это сеттаймауты и ввод дополнительных переменнных типа dont_hide=true;
Может есть более действенный способ?

vuler 22.03.2012 11:15

вроде можно воспользоваться объектом event.stopPropagation();
но она работает примерно так

$(document).click( function(event){
if( $(event.target).closest("p").length )
return;
event.stopPropagation();
});

Можно ли его передать в функцию заранее определенную?
например
$(document).on('change', '.selector_type',show_dop_block(event));
не работает :(

Pavel M. 22.03.2012 21:15

stopPropagation();
видимо нужно делать в функции select_dop_punkt
и до return;

Keeper 23.03.2012 16:05

stopPropagation(); как и target не кросбраузерно

Rootpassword 23.03.2012 16:09

зато есть аналоги сancelBubble и srcElement для IE
Event в IE-глобальный, т.е. window.event

Pavel M. 23.03.2012 16:27

Цитата:

Сообщение от Keeper
stopPropagation(); как и target не кросбраузерно

из первого сообщения темы, видно, что речь идет о Jquery
поэтому http://api.jquery.com/event.stopPropagation/ кроссбраузерно


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