在回调中发送$(this)

时间:2011-06-10 15:45:56

标签: jquery

我有这个jQuery点击事件

$('#sidebar .nav a span').click(function () {
  var sidebar_nav = $(this);
  $("#main").load("type_change.php?id="+id, successCallback);

然后我有回调来进行绑定

var successCallback = function(responseText, textStatus, XMLHttpRequest) {
  //doing all the binding in here
}

有没有办法通过$(this)sidebar_navsuccessCallback功能,以便我可以用它做点什么

4 个答案:

答案 0 :(得分:7)

您可以使用$.proxy

$("#main").load("type_change.php?id="+id, $.proxy(successCallback, $(this)));

这会将this内的successCallback设置为您传递的第二个参数。

如果您希望this仍然引用$("#main"),那么您可以更改回调以接受另一个参数:

var successCallback = function(responseText, textStatus, XMLHttpRequest, target) {
  //doing all the binding in here
}

并称之为:

var sidebar_nav = $(this);
$("#main").load("type_change.php?id="+id, function() {
    var args = $.makeArray(arguments);
    args.push(sidebar_nav);
    successCallback.apply(this, args);
});

target会引用sidebar_nav

答案 1 :(得分:4)

将其包裹在函数中,并使用.apply()调用您的函数:

$('#sidebar .nav a span').click(function () {
  var sidebar_nav = this;
  $("#main").load("type_change.php?id="+id, function() {
       successCallback.apply( sidebar_nav, arguments );
   });

现在,回调中的this将是被点击的元素,而load()回调的其他参数也将被传递。

答案 2 :(得分:2)

另一个解决方案是生成回调函数并提供this作为生成器的参数:

var genSuccessCallback = function (element) {
  return function(responseText, textStatus, XMLHttpRequest) {
    // use "element" here
  }
}

$("#main").load("type_change.php?id="+id, genSuccessCallback(this));

答案 3 :(得分:1)

你有什么理由不能在回调中使用匿名函数吗?例如:

$('#sidebar .nav a span').click(function () {
    var sidebar_nav = $(this);
    main.load("/shop_pos/includes/business_type_change.php?industry_category_id="+industry_category_id+"&business_type_id="+business_type_id+"&class_id="+class_id+"&quantity="+quantity, '', function (responseText, textStatus, XMLHttpRequest) {
        // Function can read sidebar_nav here
        if (textStatus == 'success') {
            // Do stuff here, including that $.post that you might want to do.
        }
    });