Почему jQuery не видит атрибуты элементов созданные в текущем обработчике события?

Приветствую.

На странице список (ul > li) 50 позиций, у каждой есть кнопка (a.start), по нажатию обращаемся (если первое нажатие в рамках сессии) к серверу и получаем доп. информацию по всем позициям, добавляем полученную информацию в атрибут «pl» к каждой кнопке (включая ту, по которой нажали). Дальше пробуем забрать информацию из атрибута «pl», но получаем undefined.

Подскажите, пожалуйста, в чём проблема, как победить?
Заранее благодарен.
С уважением.

P. S. Пробовал async: false, получаю в отладчике «Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check xhr.spec.whatwg.org».
И ситуация не меняется при этом. Проблема остаётся.

$(this).click(function(event){
						getitems($("ul.results"));
						var excludes = $($(this).find('a.start'), $(this));
						if ($(event.target).is(excludes)){
								playcore = $(this).find("a.start").attr("pl");  // здесь playcore = undefined; Почему??
						}
});


function getitems (obj) {
		obj.find("li > a.start").each(function(index) {
			temptype += (temptype==''?'':'|')+$(this).attr("type");
		});
		getvalue = "/plays.php?data=" + temptype;
		$.ajax({
			url: getvalue,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
			},
			success: function(data, textStatus, XMLHttpRequest) {
									
				$.ajax({
					type: 'GET',
					url: data,
					dataType: 'jsonp',
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						alert ("error");
					},
					success: function(data, textStatus, XMLHttpRequest) {
						$.each(data.response, function(i, val) {
							obj.find('li:eq('+i+') > a.start').attr("pl", val.url);
						});
					}
				});

			}
		});
		
	}
  • Вопрос задан
  • 17269 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Yago
Проблема в том, что ajax работает асинхронно. После вызова getitems данные еще не подгрузились, а вы уже пытаетесь что-то с ними сделать. Попробуйте добавить async: false всем ajax-запросам в предоставленном коде.
Ответ написан
65536
@65536
Попробуйте так

function gett
      url: getvalue,
      error: function(XMemptype==''?'':'|')+$(this).attr("type");
    });
    getvalue = "/plays.php?data=" + temptype;
    $.ajax({Litems (obj) {
    obj.find("li > a.start").each(function(index) {
      temptype += (Htt function(data, textStatus, XMLHttpRequest) {
            $.each(data.response, f
            }); function(data, textStatus, XMLHttpRequest) {
                  onp',
          error: function(XMLHttunction(i, val) {
              obj.find('li:eq('+i+') >us, errorThro a.start').attr("pl", val.url);pRequest, textStatus, errorThrown) {
            alert ("err
          }
        });pRequest, text
      }
    });
    Statwn) {
      },
        $.ajax({
          type: 'GET',
          url: data,
          dataType: 'js
      success:or");
          },
          success:

  }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы