1

Firebug indicates I have a TypeError: a.ownerDocument is undefined with this code:

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

A more complete snippet follows:

$(".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);
});

Could it be because I'm using this, because I'm using a callback inside another callback?

4

2 に答える 2

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);
});
于 2012-08-17T22:55:42.797 に答える
2

ええ、thisコールバック内では、クリックされたボタンを参照していません。$ .getJSONを呼び出す前に、ボタン参照を変数に格納してから、コールバックでその変数にアクセスできます。

于 2012-08-17T22:56:40.877 に答える