我有这个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_nav
或successCallback
功能,以便我可以用它做点什么
答案 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.
}
});