[jquery] не работают элементы на HTML участке который только что добавился

rtyug
На сайте с 13.05.2009
Offline
263
977

есть проблема, я вставил на страницу без перезагруки часть html (часть таблицы <tr><td></td></tr>)

на этой части вставляемой таблице есть кнопки "Редатировать комментарий" и "Цитировать комментарий"

вот эти кнопки тут не хотят работать, почему?

вообщем вот вставляемый текст который вставляется:

	if (msg.success_ok > 0) {


$('#error_comment').html(" ");


$('.message').html( $('.message').html()+ " <tr> <td colspan='3' align='left'> *** <span class='list_foot'> *** <b> Добавленный комментарий! </b> <br> <br> *** </span> <b> " + msg.username + " </b> </a> :: *:: *:: *:: <a name='comment-" + msg.id_pf_cm + "'> <b><span id='t" + msg.id_pf_cm + "'>" + msg.created + "</span></b> </a> :: <a href='#comment-" + msg.id_pf_cm + "'> ссылка </a> :: <b> </b> </a> :: <b> </b> </a> :: *** <a href='/comments_api/delete/photo/" + msg.id_pf_cm + "/" + msg.id_pf + "/" + msg.id_pa + "'> Удалить </a> *** <a class='create-user' height='20' align='left' href='#idd=" + msg.id_pf_cm + "'>Редактировать</a> ***<div style='text-align:right;'><a class='add_comment' title='Нажмите, для того чтобы процитировать этот текст, данный текст вставиться на поле (textarea) в редакторе в самом низу страницы... (если не получается вставить - попробуйте ссылку справа)' href='#idd=" + msg.id_pf_cm + "' >ЦИТИРОВАТЬ </a></div> </td> </tr> <tr> <td class='bbcode_text' colspan='3' aling='left'><br><br>" + msg.text_cm + "<br> <br> </td> </tr> ");


вот тот div в котором стоит class message

(может тут проблема что этот класс "рубит" все остальные которые в диве?)


<tr>

<td colspan="3" align="left">

<class='message'> </div>
</td>
</tr>

вот кнопки которые тут вставились:

<a class='create-user' height='20' align='left' href='#idd=" + msg.id_pf_cm + "'>Редактировать</a>                                                         ***<div style='text-align:right;'><a class='add_comment' title='Нажмите, для того чтобы процитировать этот текст, данный текст вставиться на поле (textarea) в редакторе в самом низу страницы... (если не получается вставить - попробуйте ссылку справа)' href='#idd=" + msg.id_pf_cm + "' >ЦИТИРОВАТЬ </a></div>        		     		     		 </td>           </tr>              <tr>        <td class='bbcode_text' colspan='3' aling='left'><br><br>" + msg.text_cm + "<br>   <br>   </td>     </tr>		");		


вот как вызывается "Цитировать комментарий"

   <script type="text/javascript" >

$('.add').click(function(){

$.get("/view_content/ajax/"+this.hash.replace(/.*(?:idd=)(\d+).*/,'$1'), function(html){$("#text_cm").val(html);});

return false;


})


$('.add_comment').click(function(){

$.get("/view_content/ajax_comment/"+this.hash.replace(/.*(?:idd=)(\d+).*/,'$1'), function(html){$("#text_cm").val( $("#text_cm").val() + html);});

return false;


})





</script>

еще есть кнопка "редактировать", но оно не принципиально...

т.е. они не работают в это части HTML которая вставилась в div с классом message!

а сами кнопки работают, на странцие которая загрузилась!

как тут сделать нормально, чтобы кнопки работали?? может где-то очевидная ошибка?

вот полностью исходники страницы этой:

http://www.x0.org.ua/view_content/92

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
Dreammaker
На сайте с 20.04.2006
Offline
569
#1

Гляньте вот сюда http://api.jquery.com/live/

Я не спец по jquery, но возможно это то, что решит проблему.

[Удален]
#2

и не должны ...

rtyug
На сайте с 13.05.2009
Offline
263
#3

сори, спасибо, не знал

документацию читал, смотрел много раз, но так и не выучил еще...

Ayavryk
На сайте с 11.10.2003
Offline
209
#4

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

Есть три варианта.

1) в Ajax-функциях есть параметр - функция callback

get(url,params,function(){alert('Загрузка закончена!');});

Если вы воткнете туда определение реакции кнопки все будет тип-топ.

2) как уже сказали ищите метод live. С его помощью можно определить событие для элемента котрого еще нет. Но у live есть ограничения - он не имеет возможности определить все события (например onChange, hover и т.д.), хотя click отработает нормально. И этот метод по сравнению с первым жрет очень много ресурсов, поэтому лучше им не пользоваться.

3) Если обработчик очень большой и привязан только к одному загружаемому компоненту, то лучше динамически подгружать и HTML и JS. Но в последнем случае возможно придется бодаться с ie6. Он не всегда адекватен при динамической загрузке JS в jquery

= = = = = = == = = =

И купите (скачайте) себе книгу http://www.ozon.ru/context/detail/id/4234012/ Не пожалеете.

Хотя она немного устарела, но идеология jquey не поменялась и разжевана там достаточно хорошо.

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
MrPIT
На сайте с 23.07.2008
Offline
44
#5
2) как уже сказали ищите метод live. С его помощью можно определить событие для элемента котрого еще нет. Но у live есть ограничения - он не имеет возможности определить все события (например onChange, hover и т.д.), хотя click отработает нормально. И этот метод по сравнению с первым жрет очень много ресурсов, поэтому лучше им не пользоваться.

В последней jquery (1.4) поддерживаются все методы

Ayavryk
На сайте с 11.10.2003
Offline
209
#6
MrPIT:
В последней jquery (1.4) поддерживаются все методы

1.4 - для любителей острых ощущений. Я подожду полгода-год стабильной версии.

[Удален]
#7
Ayavryk:
1.4 - для любителей острых ощущений

не факт, сегодня я острые ощущения получил от 1.3.2, так что в версии не совсем дело)

Ayavryk
На сайте с 11.10.2003
Offline
209
#8
bearman:
не факт, сегодня я острые ощущения получил от 1.3.2, так что в версии не совсем дело)

В 1.3.2 баги вылизывались больше года. В 1.4 их еще никто не вылизывал. Поэтому вероятность напороться существенно больше.

Хотя если делать все с нуля, нет никаких плагинов (своих и чужих), то конечно рискнуть можно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий