问题标题有点奇怪,因为我不确定如何说出问题。问题是我有许多链接要将click事件与ajax调用绑定在一起,我只是想将一些重复的代码重构到一个区域。
我试图绑定ajax调用的链接只有一个区别于它们的东西,而这是来自先前声明的对象的id。所以我有很多看起来像这样的代码:
$("a.link").bind('click', function() {
id = obj.id;
$.ajax({
url: "/set/" + id,
dataType: 'json',
type: "POST"
})
});
我试图将它重构成这样的东西:
$(“a.link”)。bind('click',ajax_link(obj.id));
function ajax_link(id) {
$.ajax({
url: "/set/" + id,
dataType: 'json',
type: "POST"
})
});
但是,正如您可以想象的那样,当元素与click事件绑定时,这实际上只是进行了ajax调用。
有没有一种简单的方法来重构这段代码,这样我就可以将常见的ajax代码提取到自己的函数中,并希望减少当前脚本中jQuery的行数?
答案 0 :(得分:3)
这应该做你想要的:
$("a.link").click(make_ajax);
function make_ajax() {
$.ajax({
url: "/set/" + id,
dataType: 'json',
type: "POST"
});
}
在这种情况下, this
指的是事件的来源是被点击的链接。
也可以定义一个闭包:
$("a.link").click(function() {
make_ajax(this.id)();
});
function make_ajax(id) {
return function() {
$.ajax({
url: "/set/" + this.id,
dataType: 'json',
type: "POST"
});
};
}
但我不认为这对你的例子有帮助。
答案 1 :(得分:0)
你总是可以在绑定的点击功能中调用ajax_link,
$("a.link").bind('click', function() { ajax_link(obj.id); });