Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обработка событий на динамически созданных объектах (https://javascript.ru/forum/jquery/1549-obrabotka-sobytijj-na-dinamicheski-sozdannykh-obektakh.html)

BlackAngels 22.08.2008 17:28

$(document).ready(function()
	{

$(".ch .a").click(

function()
{
	$("#Pr").animate({opacity: 'show'}, "slow", "easein");
	index = $(".ch a").index(this);
val_zak=$(this).parent().parent().parent().parent().find("table").attr("id");			
		});


$(".div_add a").click(
			function()
			{
			var addzak=$(this).parent().parent().parent().parent().find("table").attr("id");
			
			if(addzak=="tab1"){
				var numb=$("#tab1 tr").length;
				var str='<tr id="tr"><td>'+numb+'.</td>'
				str+='<td width="4%" class="close" onclick="clos(this);"><img src="close.gif" width="14" height="14"></td>';
				str+='<td class="ch" style="text-align:left;"><a>Выберите товар ...</a></td>';
				str+='<td><input  type="text" name="shl"></td>';
				str+='<td><input  type="text" name="dll"></td>';
				str+='<td><input  type="text" name="kol"></td>';
				str+='<td><input name="metr" value="0"> руб.</td>';
				str+='<td><span class="summ">0 руб.</span></td></tr>';
				var add=$(str);
				add.appendTo("#"+addzak);

//Как вы и сказали добавить еще раз обработчик чтобы у элемента заработал click				
$(".ch .a").click(

function()
{
	$("#Pr").animate({opacity: 'show'}, "slow", "easein");
	index = $(".ch a").index(this);
val_zak=$(this).parent().parent().parent().parent().find("table").attr("id");			
		});				
				});


});

ignar 22.08.2008 17:32

Есть очень хороший плагин listen.
Как раз для этих целей.

BlackAngels 22.08.2008 17:34

А без этого незя еще 20 кб лишние

ignar 22.08.2008 18:09

не 20, а 2.5кб запакованный.

Можно то и без него, но это будет универсально, и гораздо облегчает работу, тем более я не думаю, такая ситуация возникнет один раз.
Это одно средство на многие случаи жизни. И не нужно будет изобретать велосипед, сомневаюсь что можно будет написать лучше.
Зачем лишние грабли??

Андрей Параничев 22.08.2008 19:36

BlackAngels,
А, я понял проблему. У вас по клику добавляется обработчик на все элементы еще раз. Что-то я зашел в тупик. :)
Первый $(".ch .a").click можно удалить - по нему этому селектору элементов все-равно на тот момент не будет. Кстати, почему ".a", если у вас просто тег? Разве не .ch a?

Андрей Параничев 22.08.2008 19:58

BlackAngels,
В общем вы можете выкрутиться вот так:
$(document).ready(function()
    {
        $(".div_add a").click(
        function()
        {
            var addzak=$(this).parent().parent().parent().parent().find("table").attr("id");
 
            if(addzak=="tab1"){
                var numb=$("#tab1 tr").length;
                var str='<tr id="tr"><td>'+numb+'.</td>'
                str+='<td width="4%" class="close" onclick="clos(this);"><img src="close.gif" width="14" height="14"></td>';
                str+='<td class="ch" style="text-align:left;"><a>Выберите товар ...</a></td>';
                str+='<td><input  type="text" name="shl"></td>';
                str+='<td><input  type="text" name="dll"></td>';
                str+='<td><input  type="text" name="kol"></td>';
                str+='<td><input name="metr" value="0"> руб.</td>';
                str+='<td><span class="summ">0 руб.</span></td></tr>';
                var add=$(str);
                add.appendTo("#"+addzak);
                
            $(".ch a").each(function() {
                 this.onclick = function()
                 {
                    $("#Pr").animate({opacity: 'show'}, "slow", "easein");
                    index = $(".ch a").index(this);
                    val_zak=$(this).parent().parent().parent().parent().find("table").attr("id");            
                  }
            });                
        });
});

Deexus 09.01.2009 20:32

Есть такая библиотека livequery. Используется как раз для установки на динамически созданные элементы обработчиков.

Saratov64 15.02.2017 15:26

Цитата:

Сообщение от Deexus (Сообщение 10496)
Есть такая библиотека livequery. Используется как раз для установки на динамически созданные элементы обработчиков.

Скачал jquery.livequery

но прикрутить не смог, к моему примему так как пока это слишком сложно для новечка ((((

рони 15.02.2017 15:28

Цитата:

Сообщение от Saratov64
Скачал jquery.livequery

не надо качать старьё, jquery есть всё для делегирования из коробки.


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