我正在尝试将单击处理程序分配给JQuery对象,该对象在变量中定义:
some.object.array[8].action = function(data){console.log(data);}
anotherobject = {..}
现在在某个循环中,我需要将此函数分配给click处理程序: 并希望传递整个“另一个对象”对象
for (var i = 0; i < foo.length; i++) {
$('<div/>').click(some.object.array[i].action);
}
但是我怎样才能传递参数? 如果我将它封装在一些匿名函数中,我就会失去我的范围...:
for (var i = 0; i < foo.length; i++) {
$('<div/>').click(function() {
some.object.array[i].action(anotherobject)
});
}
因为i
已更改...
我们该怎么做?
答案 0 :(得分:3)
有太多方法可以做到这一点:
for (var i = 0; i < foo.length; i++) {
(function(i) {
$('<div/>').click(function() {
some.object.array[i].action(anotherobject);
});
})(i);
}
或者
for (var i = 0; i < foo.length; i++) {
$('<div/>').data("i", i).click(function() {
var i = $(this).data("i");
some.object.array[i].action(anotherobject);
});
});
}
或者
function getClickHandler(callback, parameter) {
return function() { callback(parameter); };
};
for (var i = 0; i < foo.length; i++) {
$('<div/>').click(getClickHandler(some.object.array[i].action, anotherobject));
}
答案 1 :(得分:0)
for(var i = 0; i < foo.length; i++)
{
$('<div/>').click(
(
return function(callback){
callback(anotherobject)
}
)(some.object.array[i].action)
);
}
答案 2 :(得分:0)
如果您希望action
函数将div维持为this
并仍然接受jQuery事件对象,则可以使用此示例中的bind:
function action(another, event){
console.log(this, arguments);
}
$(function(){
for (var i = 0; i<10; i++) {
var anotherObject = "another"+i;
var div = $('<div>'+i+'</div>');
// force 'this' to be 'div.get(0)'
// and 'arg0' to be 'anotherObject'
div.click(action.bind(div.get(0),anotherObject));
$("body").append(div);
}
})
示例:https://jsfiddle.net/Lwe5b9cx/您需要打开控制台才能看到输出,如下所示: