Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   fade маленького div внутри большого div (https://javascript.ru/forum/jquery/28431-fade-malenkogo-div-vnutri-bolshogo-div.html)

kenwo0d 19.05.2012 12:40

fade маленького div внутри большого div
 
Есть 2 дива: 1 большой, 2 маленький, и тот что маленький лежит внутри большого, и при нажатии на большой делаю fadeToggle маленького дива, но когда жму и на маленький див то fadeTottgle срабатует. Как можно зделать, что бы fadeToggle (или еще что-то) срабатывал только при нажатии на большой див, но не на маленький, но маленький лежит внутри большого?

<div class="big" style="width:500px; height:500px; border:1px solid black;">
<div class="little" style="width:50px; height:50px; border:1px solid black"></div>
</div>

jquery:

$('.big').click(function () {
$('.little').fadeToggle();
});

vadim5june 19.05.2012 13:22

Попробуй так
<div class="little" style="width:50px; height:50px; border:1px solid black"
onclick='event.stopPropagation()'></div>

kenwo0d 19.05.2012 13:38

Цитата:

Сообщение от vadim5june (Сообщение 175385)
Попробуй так
<div class="little" style="width:50px; height:50px; border:1px solid black"
onclick='event.stopPropagation()'></div>

Работает но есть недостаток, принажатии на маленький div запускается другая функция, а эта глушит. Блйооо помогите пожалуйста, я уже себе голову поламал. :-E

vadim5june 19.05.2012 13:58

Цитата:

Сообщение от kenwo0d (Сообщение 175387)
Работает но есть недостаток, принажатии на маленький div запускается другая функция, а эта глушит.

если без jquery то другую функцию запустить раньше-

onclick='myFunc();event.stopPropagation()'

kenwo0d 19.05.2012 14:00

Цитата:

Сообщение от vadim5june (Сообщение 175389)
если без jquery то другую функцию запустить раньше-

onclick='myFunc();event.stopPropagation()'

c jquery это както можно сделать?

vadim5june 19.05.2012 14:04

Цитата:

Сообщение от kenwo0d (Сообщение 175390)
c jquery это както можно сделать?

внутрь функции click на маленьком диве все это поставить-которую вы не написали

kenwo0d 19.05.2012 14:20

Маленький div это событие onclick
$('.little').onclick(function () {
  event.stopPropagation();
  //дальше код
});


Так сделать?

vadim5june 19.05.2012 14:24

Цитата:

Сообщение от kenwo0d (Сообщение 175394)
Маленький div это событие onclick
$('.little').onclick(function () {
  event.stopPropagation();
  //дальше код
});


Так сделать?

пример из руководства jquery

$("p").click(function(event){
event.stopPropagation();
// do something
});
-----------
event-не забудьте
не onclick а click

kenwo0d 19.05.2012 14:28

Цитата:

Сообщение от vadim5june (Сообщение 175395)
пример из руководства jquery

$("p").click(function(event){
event.stopPropagation();
// do something
});
-----------
event-не забудьте
не onclick а click

Не onclick, а click! Точно... Спасибо большое, работает...

kenwo0d 19.05.2012 14:58

event.stopPropagation не работает, через:
$('div').live('click', function () {
event.stopPropagation();
})

А без live() работает супер, но нужно через live так как подгружается контент... Как-то можно? ааа....

vadim5june 19.05.2012 15:01

если так написать-не будет разве
$('div').live('click', function (event) {...

kenwo0d 19.05.2012 15:14

Цитата:

Сообщение от vadim5june (Сообщение 175403)
если так написать-не будет разве
$('div').live('click', function (event) {...

Не будет тут четко написано http://api.jquery.com/event.stopPropagation/ (Additional Notes)... Решил проблему через delegate()...
Таким образом:
$('.big').delegate(this, 'click', function () {
event.stopPropagation();
});

kenwo0d 19.05.2012 15:21

Ага фиг там, а не решил, delegate не работает при подогружаемом контенте... и через live() неработает, подскажет кто? или я так понял это жопа ?

vadim5june 19.05.2012 15:23

Цитата:

Сообщение от kenwo0d (Сообщение 175404)
Не будет тут четко написано http://api.jquery.com/event.stopPropagation/ (Additional Notes)... Решил проблему через delegate()...
Таким образом:
$('.big').delegate(this, 'click', function () {
event.stopPropagation();
});

Я пишу без jquery-в некоторых случаях легче динамически добавлять событие после добавления элемента(тогда без проблем работает) чем изучать все тонкости работы live delegate bind итд

kenwo0d 19.05.2012 16:01

А как добавлять событие динамически после добавления элемента, какойто простой пример можно? Просто 2 день пробую jquery...

vadim5june 19.05.2012 16:08

без jquery просто addEventListener
или кроссбраузерно функция addEvent
function addEvent(elem, evType, fn) {
if (elem.addEventListener) {
elem.addEventListener(evType, fn, false);
}
else if (elem.attachEvent) {
elem.attachEvent('on' + evType, fn)
}
else {
elem['on' + evType] = fn
}
}

это где то здесь 10 лучших функций javascript я взял

kenwo0d 19.05.2012 16:20

Цитата:

Сообщение от vadim5june (Сообщение 175415)
без jquery просто addEventListener
или кроссбраузерно функция addEvent
function addEvent(elem, evType, fn) {
if (elem.addEventListener) {
elem.addEventListener(evType, fn, false);
}
else if (elem.attachEvent) {
elem.attachEvent('on' + evType, fn)
}
else {
elem['on' + evType] = fn
}
}

это где то здесь 10 лучших функций javascript я взял

Решил проблему подругому.
В live() можно использовать stopPropagation() таким образом.

Если писать так, то НЕ работает:
$('.big').live('click', function (event) {
event.stopPropagation();
});

А если написать так, то работает:

$('.big').live('click', function (e) {
e.stopPropagation();
});

Нарыл тут: http://stackoverflow.com/questions/3...th-live-method

vadim5june 19.05.2012 16:27

Потестируй теперь-может на этот раз получилось


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