Почему мой jQuery выдает ошибку, когда я вставляю эту строку? - PullRequest
0 голосов
/ 30 октября 2010

Почему мой jQuery выдает ошибку при вводе этой строки?

 <script type="text/javascript">
        $(function(){
            $(".arrowbutton").click(function(){
                id = $(this).attr('rel');
                $.ajax({
                type:"POST",
                url:"/upvote",
                data:{'id':id},
                beforeSend:function() {
                },
                success:function(html){
                    $(this).hide();
                }
                });
                return false;
                });

            });
    </script>

Когда я удаляю $(this).hide(); все нормально. Но я хочу это скрыть !!!

Ответы [ 4 ]

3 голосов
/ 30 октября 2010

Поскольку this не относится к кнопке со стрелкой, но относится к объекту запроса AJAX.

$(".arrowbutton").click(function(){
  var that = this;
  var id = $(this).attr('rel');
  $.ajax({
    type:"POST",
    url:"/upvote",
    data:{'id':id},
    beforeSend:function() {

    },
    success:function(html){
      $(that).hide();
    }
  });

  return false;
});

jQuery вызывает вашу success функцию примерно так:

handleSuccess: function( s, xhr, status, data ) {
  // If a local callback was specified, fire it and pass it the data
  if ( s.success ) {
    s.success.call( s.context, data, status, xhr );
  }

  // Fire the global callback
  if ( s.global ) {
    jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] );
  }
},

Первый аргумент метода вызова устанавливает ключевое слово this в функции успеха на s.context

1 голос
/ 30 октября 2010

«this» означает это во всех ситуациях, потому что вы находитесь внутри новой функции, которая является новой this.

Ознакомьтесь с этим руководством, чтобы узнать все возможные способы работы с ним:

1 голос
/ 30 октября 2010

$(this) относится к запросу Ajax, а не к окружающей кнопке.

Попробуйте использовать закрытие следующим образом:

<script type="text/javascript">
    $(function(){
        $(".arrowbutton").click(function(){
            var arrowbutton = $(this);
            id = $(this).attr('rel');
            $.ajax({
            type:"POST",
            url:"/upvote",
            data:{'id':id},
            beforeSend:function() {
            },
            success:function(html){
                arrowbutton.hide();
            }
            });
            return false;
            });

        });
</script>
1 голос
/ 30 октября 2010

Потому что $(this) не возвращает то, что вы думаете, что делает в обратном вызове успеха.Вы можете использовать закрытие:

$(function(){
    $('.arrowbutton').click(function(){
        var button = $(this);
        $.ajax({
            type: 'POST',
            url: '/upvote',
            data: { id: this.rel },
            beforeSend:function() {
            },
            success:function(html) {
                button.hide();
            }
        });
        return false;
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...