Использование селекторов и $ (this) в ответе Jquery Ajax - PullRequest
2 голосов
/ 23 июня 2011

Мне интересно, как я использую селекторы Jquery в ответе Ajax.У моего сайта есть канал, и у каждого основного блока есть уникальный идентификатор, но я не хочу однозначно идентифицировать каждый div, который находится внутри этого (который много).До сих пор $ (this) возвращает идентификатор клика из обработчика основного события, но когда я использую его в функции ответа, я получаю 'undefined'.Как я могу добиться того же эффекта, что и $ (this), из ответа или мне нужно где-нибудь найти уникальный идентификатор?

Основная функция вызывается по гиперссылке с определенным атрибутом rel

     function(msg){ 

      var container = $(this).parent().attr('id');   
      alert (container); //returns undefined

      }

Ответы [ 4 ]

2 голосов
/ 23 июня 2011

Поскольку функция является обратным вызовом AJAX, вы можете использовать параметр context :

$.ajax({
    // ...
    context: this,
    success: function(msg) {
        // Here, 'this' refers to the same object as when ajax() was called.
        var containerId = $(this).parent().attr("id");
        window.alert(containerId);
    }
});

Вы также можете вызвать функцию обратного вызова в контексте самого контейнера:

$.ajax({
    // ...
    context: $(this).parent().get(0),
    success: function(msg) {
        // Now, 'this' refers to the container element.
        var containerId = $(this).attr("id");
        window.alert(containerId);
    }
});
0 голосов
/ 23 июня 2011

Я полагаю, вы ссылаетесь на this в функции обратного вызова. Вы можете сделать что-то вроде этого:

$('#stuff').click(function() {
    var $this = $(this);
    $.get('...', function() {
        //do stuff with $this
    });
});
0 голосов
/ 23 июня 2011

Это побочный эффект асинхронного вызова функции обратного вызова.Когда он вызывается, this больше не соответствует ожидаемому.

Сохранение текущего значения this в переменной до создания обратного вызова помогает:

var self = this;
function (msg) {
  var container = $(self).parent().attr('id');   
  alert (container); //returns undefined
}
0 голосов
/ 23 июня 2011

Поскольку ajax находится внутри обработчика щелчка, просто сделайте это:

$(...).click(function(){
      var $this = $(this); //<-- reference variable
      //ajax function...
      function(msg){ 

         var container = $this.parent().attr('id');   
         alert (container); //returns undefined

      }
})
...