Как мне ссылаться на вызывающий элемент dom в функции успеха jquery ajax? - PullRequest
6 голосов
/ 30 сентября 2008

Я пытаюсь изменить класс элемента, если вызов ajax, основанный на этом элементе, успешен

<script type='text/javascript'>
$("#a.toggle").click(function(e){
    $.ajax({
        url: '/changeItem.php',
        dataType: 'json',
        type: 'POST',
        success: function(data,text){
            if(data.error=='')
            {
                if($(this).hasClass('class1'))
                {
                    $(this).removeClass('class1');
                    $(this).addClass('class2');
                }
                else if($(this).hasClass('class2'))
                {
                    $(this).removeClass('class2');
                    $(this).addClass('class1');
                }
            }
            else(alert(data.error));
        }   
    });
    return false;
});
</script>
<a class="toggle class1" title='toggle-this'>Item</a>

Мое понимание проблемы состоит в том, что в функции успеха this ссылается на параметры объекта ajax, а НЕ на вызывающий элемент dom, как это происходит в других местах функции click. Итак, как мне ссылаться на вызывающий элемент dom и проверять / добавлять / удалять классы?

Ответы [ 4 ]

17 голосов
/ 30 сентября 2008

Вы можете просто сохранить его в переменной. Пример:

$("#a.toggle").click(function(e)
{
   var target = $(this);
   $.ajax({
      url: '/changeItem.php',
      dataType: 'json',
      type: 'POST',
      success: function(data,text)
      {
         if(data.error=='')
         {
            if(target.hasClass('class1'))
            {
               target
                  .removeClass('class1')
                  .addClass('class2');
            }
            else if(target.hasClass('class2'))
            {
               target
                  .removeClass('class2')
                  .addClass('class1');
            }
         }
         else(alert(data.error));
      }       
   });
   return false;
});
5 голосов
/ 30 сентября 2008

jQuery передает цель события вместе с некоторой другой информацией о нем в функцию-обработчик. См. http://docs.jquery.com/Events_%28Guide%29 для получения дополнительной информации об этом.

В вашем коде на него будет ссылаться как $ (e.target).

3 голосов
/ 22 августа 2014

Лучше установить параметр ajax: context: this. Пример:

    $.ajax({
    url: '/changeItem.php',
    dataType: 'json',
    type: 'POST',
    context: this,
    success: function(data,text){
        if(data.error=='')
        {
            if($(this).hasClass('class1'))
            {
                $(this).removeClass('class1');
                $(this).addClass('class2');
            }
            else if($(this).hasClass('class2'))
            {
                $(this).removeClass('class2');
                $(this).addClass('class1');
            }
        }
        else(alert(data.error));
    }   
});
2 голосов
/ 25 мая 2010

Я знаю, что он старый, но вы можете использовать параметр 'e' из функции щелчка.

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