不能使用$(“#item_id”)。text作为$ .get回调函数?

时间:2013-04-11 05:58:22

标签: javascript jquery

现在我有了从cgi-script获取一些数据的代码。它运作得很好。

$.get('cgi/remote_user', function(data){
  $('#user_id').text(data);
});

但如果我尝试将$('#user_id').text设置为回调函数,则会失败并显示Uncaught TypeError: Illegal invocation

$.get('cgi/remote_user', $('#user_id').text);

知道为什么会这样吗? $('#user_id').textfunction(data) {}具有相同的功能..

我怀疑它可能是无效的调用上下文,我是对的吗?

2 个答案:

答案 0 :(得分:1)

原因是当您获得对text函数的引用时,它不再附加到该对象。它将在全局上下文(窗口)中调用,而不是在对象的上下文中调用。

您可以使用proxy方法将函数绑定到上下文:

var user = $('#user_id');
$.get('cgi/remote_user', $.proxy(user.text), user);

答案 1 :(得分:0)

$.get('cgi/remote_user', $('#user_id').text);

就像写作:

var tmp = $('#user_id').text;
$.get('cgi/remote_user', tmp);

相当于

$.get('cgi/remote_user', $.fn.text);

$('#user_id')没有this

你想要的是

$.get('cgi/remote_user', $.fn.text.bind($('#user_id')));