Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 20.05.2013, 13:56
Интересующийся
Отправить личное сообщение для colonel Посмотреть профиль Найти все сообщения от colonel
 
Регистрация: 30.11.2009
Сообщений: 24

Сообщение от rozmath Посмотреть сообщение
Привет всем!
Есть система переписки на php + mySql + jQuery
Проблема вот в чем:
Нужно реализовать клик мышки на комментарии.
Комментарии находятся в такой иерархии:

<div class="form_field_center" id="message_list">
	<div id="newComment"></div>
	<div id="comment_list">
          //Сообщение читаются из базы и вставляются сюда
        </div>
</div>


Сообщения читаются из базы в файле .рhp и возвращаются благодаря функции на AJAX
foreach($comments as $c)
	echo '<div>'.$c->markup_read().'</div>';


$('#comment_list').append(html);


В свою очередь, существует класс сообщений с методом markup_read, что возвращает HTML разметку сообщение с соответствующими классами.
public function markup_read(){
		$this->data['date_time'] = strtotime($this->data['date_time']);
		
		return '<div class="comment" id='.$this->data['id'].'>
						<div class="avatar"></div>
						<div class="delete" id='.$this->data['id'].'></div>
						<div class="edit" 	id='.$this->data['id'].'></div>
						<div class="author">'.$this->data['author'].' ᐅ '.$this->data['recipient'].'</div>
						<div class="date" title="Added at '.date('H:i \o\n d M Y',$this->data['date_time']).'">'.date('d/m/Y H:i:s',$this->data['date_time']).'</div>
						<p>'.$this->data['message'].'</p>
						<div>'.$this->data['id'].'</div>
						</div>';
	}


Нужно реализовать обработку клиак по разметке сообщение - тоесть по классу comment, delete, edit ...
Как добраться до класса comment? Помогите, пожалуйста. Спасибо.

Если правильно понял, то можно так:
$('#comment_list')
   .on('click', '.comment', fucntion(){})
   .on('click', '.delete', fucntion(){})
   .on('click', '.edit', fucntion(){});
Ответить с цитированием
  #12 (permalink)  
Старый 20.05.2013, 14:05
Новичок на форуме
Отправить личное сообщение для rozmath Посмотреть профиль Найти все сообщения от rozmath
 
Регистрация: 20.05.2013
Сообщений: 8

Сначала так и было, пока новидомлення генерировались на странице. Но теперь они генерируются в файле script.js и отправляются после $('#comment_list').append (html)
Если открыть источник страницы, сообщений div нет.
Код:
<div class="form_field_center" id="message_list">
	<div id="newComment"></div>
	<div id="comment_list"></div>
</div>
Ответить с цитированием
  #13 (permalink)  
Старый 20.05.2013, 14:11
Интересующийся
Отправить личное сообщение для colonel Посмотреть профиль Найти все сообщения от colonel
 
Регистрация: 30.11.2009
Сообщений: 24

Сообщение от rozmath Посмотреть сообщение
Сначала так и было, пока новидомлення генерировались на странице. Но теперь они генерируются в файле script.js и отправляются после $('#comment_list').append (html)
Если открыть источник страницы, сообщений div нет.
Код:
<div class="form_field_center" id="message_list">
	<div id="newComment"></div>
	<div id="comment_list"></div>
</div>

Можно попробовать тогда так:
$('#comment_list')
   .append(html)
   .find('.comment').on('click', fucntion(){}).end()
   .find('.delete').on('click', fucntion(){}).end()
   .find('.edit').on('click', fucntion(){});


либо так:
var commentList = function(){return $('#comment_list');};
commentList
   .append(html)
   .find('.comment').on('click', fucntion(){}).end()
   .find('.delete').on('click', fucntion(){}).end()
   .find('.edit').on('click', fucntion(){});


Соотв. код этот ставить после загрузки Вашего "script.js".

На самом деле способов множество может быть ...

Последний раз редактировалось colonel, 20.05.2013 в 14:18.
Ответить с цитированием
  #14 (permalink)  
Старый 20.05.2013, 14:29
Новичок на форуме
Отправить личное сообщение для rozmath Посмотреть профиль Найти все сообщения от rozmath
 
Регистрация: 20.05.2013
Сообщений: 8

Опять не работает. Перепробовал все ваши варианты а также вводил свои правки - ни один не заработал.
Возможно нужно грузить сообщения не в файле script.js?
Ответить с цитированием
  #15 (permalink)  
Старый 20.05.2013, 14:38
Интересующийся
Отправить личное сообщение для colonel Посмотреть профиль Найти все сообщения от colonel
 
Регистрация: 30.11.2009
Сообщений: 24

Сообщение от rozmath Посмотреть сообщение
Опять не работает. Перепробовал все ваши варианты а также вводил свои правки - ни один не заработал.
Возможно нужно грузить сообщения не в файле script.js?
Хм ... Ну, нужно просто тогда смотреть в консоли - что приходит вообще ... Ну и пробовать результаты ... И, в зависимости от этого двигаться дальше ...

Как-то так:
console.group('Test #comment_list');
   console.log($('#comment_list'));
   console.log(html);
$('#comment_list').append(html);
   console.log($('#comment_list'));
   console.log($('#comment_list').find('.comment'));
   console.log($('#comment_list').find('.delete'));
   console.log($('#comment_list').find('.edit'));
console.groupEnd();


Ну и соотв. заменяя $('#comment_list') на те варианты, которые приводил выше.
Ответить с цитированием
  #16 (permalink)  
Старый 20.05.2013, 14:45
Новичок на форуме
Отправить личное сообщение для rozmath Посмотреть профиль Найти все сообщения от rozmath
 
Регистрация: 20.05.2013
Сообщений: 8

Если использовать строку при нажатии на comment_list
var htmlStr = $('#comment_list').html();

получим всю историю переписки строкой.
Но как получить ID сообщения на который наведен курсор и щелчке на нем?
Ответить с цитированием
  #17 (permalink)  
Старый 20.05.2013, 14:56
Интересующийся
Отправить личное сообщение для colonel Посмотреть профиль Найти все сообщения от colonel
 
Регистрация: 30.11.2009
Сообщений: 24

Сообщение от rozmath Посмотреть сообщение
Если использовать строку при нажатии на comment_list
var htmlStr = $('#comment_list').html();

получим всю историю переписки строкой.
Но как получить ID сообщения на который наведен курсор и щелчке на нем?
Легко:
var htmlStr  = $('#comment_list').html();
var commentList = $(htmlStr);
commentList
   .find('.comment').on('click', fucntion(){var t = $(this); var id = t.prop('id');}).end()
   .find('.delete').on('click', fucntion(){var t = $(this); var id = t.prop('id');}).end()
   .find('.edit').on('click', fucntion(){var t = $(this); var id = t.prop('id');});
Ответить с цитированием
  #18 (permalink)  
Старый 20.05.2013, 15:33
Новичок на форуме
Отправить личное сообщение для rozmath Посмотреть профиль Найти все сообщения от rozmath
 
Регистрация: 20.05.2013
Сообщений: 8

var commentList = $(htmlStr);

при клике на comment_list возвращает массив типа [object Object]
Ответить с цитированием
  #19 (permalink)  
Старый 20.05.2013, 15:53
Новичок на форуме
Отправить личное сообщение для rozmath Посмотреть профиль Найти все сообщения от rozmath
 
Регистрация: 20.05.2013
Сообщений: 8

Вот как выглядят два сообщения при проверке элементов:

Вот html строка етих сообщений:

Однако при просмотре источника страницы наблюдаю следующее:
Ответить с цитированием
  #20 (permalink)  
Старый 20.05.2013, 15:58
Новичок на форуме
Отправить личное сообщение для rozmath Посмотреть профиль Найти все сообщения от rozmath
 
Регистрация: 20.05.2013
Сообщений: 8

Консоль выдала:
</div> has no method 'find'
Ответить с цитированием
Ответ



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

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