2009-09-08 6 views
3

Мне интересно, почему $ (this) не работает после вызова jQuery ajax.

Мой код такой.

$('.agree').live("click", function(){ // use live for binding of ajax results 
     var id=($(this).attr('comment_id')); 
     $.ajax({ 
     type: "POST", 
     url: "includes/ajax.php?request=agree&id="+id, 
     success: function(response) { 
      $(this).append('hihi'); 
     } 
     }); 
     return false; 
    }); 

Почему это не работает в этом случае после вызова ajax? Это сработает, если я буду использовать его перед ajax, но без эффекта.

+0

Я рекомендую иметь прочитанный на область видимости функции JavaScript - https://developer.mozilla.org/En/Core_JavaScript_1. 5_Reference/Functions_and_function_scope, а также верность языка Дуга Крокфорда - http://javascript.crockford.com/survey.html –

ответ

11

В обратном вызове jQuery ajax «это» является ссылкой на параметры, используемые в запросе ajax. Это не ссылка на элемент DOM.

Вы должны захватить "внешние" $ (это) первый:

$('.agree').live("click", function(){ // use live for binding of ajax results 
     var id=($(this).attr('comment_id')); 
     var $this = $(this); 
     $.ajax({ 
     type: "POST", 
     url: "includes/ajax.php?request=agree&id="+id, 
     success: function(response) { 
       $this.append('hihi'); 
     } 
     }); 
     return false; 
    }); 
+1

+1 избили меня ( – peirix

+0

awesome! Спасибо вам, ребята! –

+0

Еще одна вещь. делать это? Как близко ближе? $ this.closest ('div'). html ('hihi'); –

Смежные вопросы