当我放入这一行时,为什么我的jQuery出错?

时间:2010-10-30 09:52:07

标签: javascript jquery-validate

为什么当我把这行放入时,我的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 个答案:

答案 0 :(得分:3)

因为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 :(得分:1)

因为$(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;
    });
});

答案 2 :(得分:1)

$(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>

答案 3 :(得分:1)

“this”在所有情况下都意味着这一点,因为你在一个新的函数里面是新的。

查看本教程,了解处理它的所有不同方法: