Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2011, 17:01
Новичок на форуме
Отправить личное сообщение для Turok Посмотреть профиль Найти все сообщения от Turok
 
Регистрация: 10.08.2011
Сообщений: 5

Области видимости событий
есть 3 блока div, при клике на любой из них срабатывает первое событие, а когда программно добавляем 4 блок, то это событие на нём не работает
<div id="test">
    <div class="test">test3</div>
    <div class="test">test2</div>
    <div class="test">test1</div>
</div>
<div id="press">Добавить блок</div>
<script>
    $('.test').click(function(){      //первое событие
        alert('hi');
        })
         
    $('#press').click(function(){     //второе событие
        $("#test").prepend('<div class=\"test\">test4</div>'); 
    })
</script>


как добиться чтоб первое событие работало с 4 блоком?

если первое событие включить во второе событие , то на 4 блоке будет срабатывать первое событие, но зато в первых трёх блоках он будет вылетать аж два раза
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2011, 17:13
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

.live('click', function() {


Просто навешивая клик у тебя не будет работать так как при добавлении события элемента на странице нету. Поэтому либо вручну ему добавлять, либо использовать .live()
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2011, 17:36
Новичок на форуме
Отправить личное сообщение для Turok Посмотреть профиль Найти все сообщения от Turok
 
Регистрация: 10.08.2011
Сообщений: 5

Всё отлично работает, спасибо.

Если кто знает, как будет выглядить функция на чистом javascripte аналогичная .live ? Чтобы понять как это всё работает.

Последний раз редактировалось Turok, 14.08.2011 в 22:17.
Ответить с цитированием
  #4 (permalink)  
Старый 14.08.2011, 19:26
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Цитата:
live() вешает событие не на сам элемент, а на document. В результате bubbling-а событие, которое произошло над каким-либо элементом поднимается вверх по DOM-дереву и соответственно вызывает обработчики всех элементов, которые оно встретит. Итак, в конце концов событие доходит до document-а и обработчики вызываются у него. Обработчик, который устанавливает jQuery.live() проверяет - соответствует ли event.target (а именно здесь хранится обьект DOM-дерева, с которым произошло событие) соответствующему селектору и если соответствует - то выполняет обработчик.
Особенности работы jQuery.live()
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай

Последний раз редактировалось walik, 14.08.2011 в 19:28.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
стили Css в зависимости от высоты активной области браузера Vladimir_Kl Javascript под браузер 3 23.03.2011 15:04
Как узнать находится ли DOM элемент в области видимости? phgrey Общие вопросы Javascript 4 22.03.2011 18:05
Переопределение событий lispik jQuery 4 13.01.2011 11:30
области видимости элементов zaytsewa jQuery 14 11.01.2011 15:49
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 18:03