2011-06-10 43 views
7

我有这样的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函数,所以我可以做些什么

+0

问自己,当你第一次加载前2日跨度点击发生了什么事件上升? 我认为你需要设计重新考虑。不能提出一个,因为我不确定你真正需要什么。但你的错误是你有导航链接,你想传递给单个元素的异步事件。载荷事件可能不会按照您所假设的顺序上升。 – venimus 2011-06-10 15:52:45

回答

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

+0

保留'#main'元素为'this'的好处。这可能是OP的意图。 +1 – user113716 2011-06-10 15:59:26

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()回调将被传递以及。

+0

会不会像'successCallback.apply(sidebar_nav,arguments)'更合适?在你的例子中'this'正在调用'#main'。 – buzzedword 2011-06-10 15:51:17

+0

@ Buzzedword:是的,我已经抓住了。我专注于错误的元素。谢谢你的提醒。 :o) – user113716 2011-06-10 15:53:05

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. 
     } 
    }); 
2

另一种解决方案是将产生的回调函数,并提供this作为参数传递给发电机:

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

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

+1另一个好方法。 – user113716 2011-06-10 15:58:35