Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.05.2012, 13:29
Аватар для saturn
Аспирант
Отправить личное сообщение для saturn Посмотреть профиль Найти все сообщения от saturn
 
Регистрация: 08.09.2011
Сообщений: 67

Передал аяксом класс в <div>, но как отловить событите клик на этот класс ?
Помогите разобраться, меня этот вопрос уже мучает давно.
Как можно отловить событие клик на класс без перезагрузки страницы, когда я
это класс передал аяксом.
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2012, 13:41
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Повешайте обработчик события "click" на этот <div> сразу после окончания загрузки страницы, пусть в нем еще нет нужного элемента, который динамически подгружается с помощью AJAX. Поскольку событие "click" всплывает, то клик на дочерних элементах div`а будет пойман им на стадии всплытия. Даже если дочерние элементы будут добавлены уже потом. Чтобы отличить в таком обработчике, по кому именно кликнули, нужно проанализировать свойство target (или srcElement IE) объекта event, передаваемого в обработчик.

Если использовать jQuery, там все упрощается благодаря методам .on() и .delegate().



P.S. Черт. Похоже, я не въехал в проблему. Можно подробнее?

Последний раз редактировалось Amphiluke, 30.05.2012 в 13:43.
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2012, 14:01
Аватар для saturn
Аспирант
Отправить личное сообщение для saturn Посмотреть профиль Найти все сообщения от saturn
 
Регистрация: 08.09.2011
Сообщений: 67

Вот к примеру есть блок
<div class="one"></div>
По клику на него я отправляю данные с помощью $.post(); и при этом меняю класс one на two
$('.one').on('click', function(){
$.post('...');
$('.one').removeClass().addClass('two');
});

А я пытаюсь отловить событие клик без перезагрузки страницы на класс two.
У меня есть один вариант, но мне кажется что он не совсем правильный, это просто дописать в клике на one после того как добавляю класс two
$('.two').click(function(){
alert('Работает')
});
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2012, 14:08
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Сообщение от saturn
У меня есть один вариант, но мне кажется что он не совсем правильный
Вполне себе нормальный вариант.

Но можно прослушивать событие "click" на родительском элементе, в котором лежит div (даже на body или document).

(function($) {
    $(document).ready(function() {
        // вместо $("body") лучше подставить родителя div`а,
        // если он существует сразу при загрузке страницы
        $("body").on("click", ".two", function() { alert("Работает"); });
    });
})(jQuery);
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2012, 14:54
Аватар для saturn
Аспирант
Отправить личное сообщение для saturn Посмотреть профиль Найти все сообщения от saturn
 
Регистрация: 08.09.2011
Сообщений: 67

Спасибо за нормальные советы.
Ответить с цитированием
  #6 (permalink)  
Старый 30.05.2012, 15:34
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

saturn,
$('.two').live("click", function(){

http://jquery-docs.ru/Events/live/#typefn
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2012, 17:02
Аватар для saturn
Аспирант
Отправить личное сообщение для saturn Посмотреть профиль Найти все сообщения от saturn
 
Регистрация: 08.09.2011
Сообщений: 67

Deff
Хорошо что проверил пост, чуть большую часть кода не переписал.
Спасибо, выручили капитально, то что нужно.
Ответить с цитированием
  #8 (permalink)  
Старый 30.05.2012, 19:24
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

saturn, имейте в виду, что метод .live() объявлен как «deprecated», и документация всячески рекомендует отказываться от него в пользу более производительных методов .on() и .delegate().
Ответить с цитированием
  #9 (permalink)  
Старый 30.05.2012, 20:00
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

As of jQuery 1.7, .delegate() has been superseded by the .on() method.

в общем, приходите к .on(), очень понятный, гибкий и действительно мощный (в плане функциональности) метод.

$('.two').on("click", function() {});
Ответить с цитированием
  #10 (permalink)  
Старый 30.05.2012, 22:00
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

tadjik1,
Хорошо Вам танкистам... А у нас третий год 1.4.4.
Ответить с цитированием
Ответ



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

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