Ключевое слово `this` проблема с использованием в функции ajax - PullRequest
1 голос
/ 07 апреля 2011

хорошо, это какой-то сумасшедший код jquery, который у меня здесь.то, что он делает, идет в файл php, чтобы получить какие-то результаты, а затем сдвинуть вниз результаты, но если результаты уже есть, просто сдвиньте вниз

$('#compatibility h2').click(function(){
        var clicked = $(this);
        if($(this).hasClass('collapsed'))
        {
            $(clicked).removeClass('collapsed');
            if($($(this)[0].nextSibling).is('ul'))
            {
                $(this).next().slideToggle();
            }
            else
            {
            $.get("getproducts.php", {cid: $(this).attr('id'), did: $("#deviceId").val()},
                  function(data)
                  {   
                    $(clicked).after(data).next().slideToggle(); //adds a <ul> <li> </li> </ul>  
                  });
            }
        }
        else
        {

            $(this).addClass('collapsed');  
            $(this).next().slideToggle();
        }
        //$(this).css('margin','4px 0 7px');
});

, теперь мой вопрос немного неясен, но я былИнтересно, почему, когда я заменяю clicked ключевым словом this, код не вставляет данные после h2, по которому щелкнули.Также мне интересно, делаю ли я это наилучшим образом с помощью jquery.

Ответы [ 4 ]

5 голосов
/ 07 апреля 2011

Почему ты это делаешь?var clicked = '#'+$(this).attr('id');?

Это должно работать:

var clicked = $(this);
2 голосов
/ 07 апреля 2011

На первый взгляд, я думаю, что использование "this" будет везде, кроме как внутри вашего $ .get (...).Одна хитрость, которую я иногда использую для обхода обратных вызовов и нескольких версий «this», заключается в добавлении следующего кода в начало моего класса или функции:

var me = this;

Тогда я просто использую $(me) вместо$(this)

1 голос
/ 07 апреля 2011

Проблема в строке 10 или около того, где он говорит:

$(clicked).after(data).next().slideToggle(); //adds a <ul> <li> </li> </ul>  

Если вы замените clicked на this, он перестанет работать: this будет указывать на ответиз $.get, а не из любого элемента DOM.

0 голосов
/ 07 апреля 2011

Линии 2 и 3 выглядят очень неправильно для меня, если то, что вы делаете, это то, что я думаю, что вы делаете, то что вы делаете, это строите строку '#' + id_of_clicked_element, а затем пытаетесь запустить операции jQuery в теме. Это никогда не сработает! И это тоже не нужно.

Просто if ($(this).hasClass ('collapsed')) должно быть хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...