jQuery fadeOut回调错误

时间:2012-08-17 22:53:41

标签: javascript jquery

Firebug表示我有TypeError: a.ownerDocument is undefined代码:

$(this).text('Updated!').fadeOut('900',  function() { 
  $(this).text('Update').attr('disabled', 'disabled').show()
});

更完整的片段如下:

$(".update-role").click(function() {
  var newRole = $(this).prev().val();
  var userId  = $(this).parents('tr').attr('id');  // e.g. 'user-role-18'
  userId = userId.split('-');
  userId = userId[2]; // so we get '18'
  $.getJSON('services/update_staff_role.php', {r: newRole, id: userId}, function(j) {
    if(j.result == 'success') {
    $(this).text('Updated!').fadeOut('900',  function() { 
          $(this).text('Update').attr('disabled', 'disabled').show()
        });
    } else {
      alert(j.reason);
    }
  });
  console.info(userId, newRole);
});

可能是因为我正在使用this,因为我在另一个callback内使用了callback吗?

2 个答案:

答案 0 :(得分:6)

添加var _this = $(this);,而不是$(this).text..使用_this.text...,因为$(this)引用了$.getJSON

$(".update-role").click(function() {
  var _this = $(this);
  var newRole = $(this).prev().val();
  var userId  = $(this).parents('tr').attr('id');
  userId = userId.split('-');
  userId = userId[2];
  $.getJSON('services/update_staff_role.php', {r: newRole, id: userId}, function(j) {
    if(j.result == 'success') {
    _this.text('Updated!').fadeOut('900',  function() { 
          $(this).text('Update').attr('disabled', 'disabled').show()
        });
    } else {
      alert(j.reason);
    }
  });
  console.info(userId, newRole);
});

答案 1 :(得分:2)

是的,this,在回调内部时,并不是指被点击的按钮。在调用$ .getJSON之前,您可以将按钮引用存储在变量中,然后在回调中访问该变量。