Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Событие click на подгружаемый ajax-ом контент (https://javascript.ru/forum/misc/61658-sobytie-click-na-podgruzhaemyjj-ajax-om-kontent.html)

Poveritov 29.02.2016 13:17

Событие click на подгружаемый ajax-ом контент
 
Добрый день,

в скрипте подгружаю ajax-ом контент, использую jquery 1.12.1
для подгружаемого контента использую метод on для события click.

Но в ответ ничего не происходит. Ошибок никакие не поступает.
Подскажите, как нужно исправить код, чтобы была реакция подгружаемого контента на обращающиеся к нему события.

$('#photo-stock').on('click', 'img', function(){
alert("Действие");
});


в блок #photo-stock подгружается контент <img/>

Dilettante_Pro 29.02.2016 13:46

Poveritov,
Что-то всячески крутил-вертел... Работает. Не смог добиться, чтобы не работало. Правда, без ajax, но подгружаемый.
<!DOCTYPE html>
<html>
<head>
    <title>Untitled Page</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js" type="text/javascript"></script>
    <script>
       $(document).ready(function () {
          $('#photo-stock').on('click', 'img', function () {
              alert("Действие");
          });
       });
    </script>
</head>
<body>
   <div id="photo-stock"></div>
   <script>
       $('#photo-stock').html("<img src='http://javascript.ru/forum/images/smilies/smile.gif'>");
   </script>
</body>
</html>

Для имитации задержки при загрузке использовал вместо скрипта стр.16-18
<input type=button onclick="$('#photo-stock').html(`<img src='http://javascript.ru/forum/images/smilies/smile.gif'>`)" value="+"/>

- все равно работает

Poveritov 29.02.2016 14:16

Цитата:

Сообщение от Dilettante_Pro (Сообщение 409596)
Poveritov,
Что-то всячески крутил-вертел... Работает. Не смог добиться, чтобы не работало. Правда, без ajax, но подгружаемый.
<!DOCTYPE html>
<html>
<head>
    <title>Untitled Page</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js" type="text/javascript"></script>
    <script>
       $(document).ready(function () {
          $('#photo-stock').on('click', 'img', function () {
              alert("Действие");
          });
       });
    </script>
</head>
<body>
   <div id="photo-stock"></div>
   <script>
       $('#photo-stock').html("<img src='http://javascript.ru/forum/images/smilies/smile.gif'>");
   </script>
</body>
</html>

Для имитации задержки при загрузке использовал вместо скрипта стр.16-18
<input type=button onclick="$('#photo-stock').html(`<img src='http://javascript.ru/forum/images/smilies/smile.gif'>`)" value="+"/>

- все равно работает

Прочитал, что возникают подобные проблемы при работе с ajax, рекомендуют задействовать live, но у меня в jquery 1.12 метод live уже исключен.

destus 29.02.2016 14:27

Poveritov,
где код настройки аякс запроса + ответ сервера вместе со всеми http заголовками

Dilettante_Pro 29.02.2016 14:27

Цитата:

Сообщение от Poveritov
но у меня в jquery 1.12 метод live уже исключен.

Вместо исключенного live как раз рекомендуется использовать on

Poveritov 29.02.2016 15:02

$.ajax({
                url:'/account/metrics/phloader',
                type: 'POST',
		dataType:"json",
		data:({"urlPhoto":postData,"idPhoto":idPhoto}),
                success: function(response) {
			//происходит вставка <img src='' />			
		    $(".photo-stock ").append(response.photo_mini);

		return true;
                    } ,
			error: function(jqXHR, textStatus, errorThrown)  {....},

            });


в response.photo_mini возвращается <img src='...' />

destus 29.02.2016 15:09

Poveritov,
ну и назначьте обработчик на картинку в функции success.

Poveritov 29.02.2016 15:31

можно пример? так как назначил я
$(".photo-stock img#"+response.photo_id).attr("onclick","msgshow("+response.photo_id+")");

не сработало, пишет "photo is not defined"

destus 29.02.2016 15:38

Poveritov,
У вас в первом сообщении пример. Только надо перенести его в функцию success.
$('#photo-stock').on('click', 'img', function(){
alert("Действие");
});

Poveritov 29.02.2016 15:43

Все отлично) Спасибо.


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