Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript将参数传递给变量内部的函数_Javascript_Jquery - Fatal编程技术网

Javascript将参数传递给变量内部的函数

Javascript将参数传递给变量内部的函数,javascript,jquery,Javascript,Jquery,我正在尝试将单击处理程序分配给变量中定义的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.arra

我正在尝试将单击处理程序分配给变量中定义的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(变量i=0;i
但是我如何传递参数呢? 如果我将其封装在某个匿名函数中,我将失去作用域…:

for (var i = 0; i < foo.length; i++) {
    $('<div/>').click(function() {
        some.object.array[i].action(anotherobject)
    });
}
for(变量i=0;i
因为
i
已更改

我们应该怎么做呢?

for(var i=0;ifor(var i = 0; i < foo.length; i++)
{
  $('<div/>').click(
    (
      return function(callback){
        callback(anotherobject)
      }
    )(some.object.array[i].action)
  );
}
{ $(“”)。单击( ( 返回函数(回调){ 回调(另一个对象) } )(some.object.array[i].action) ); }
实现这一点的方法太多了:

for (var i = 0; i < foo.length; i++) {
    (function(i) {
        $('<div/>').click(function() {
            some.object.array[i].action(anotherobject);
        });
    })(i);
}
for(变量i=0;i

for(变量i=0;i

函数getClickHandler(回调,参数){ 返回函数(){callback(parameter);}; }; 对于(变量i=0;i
如果希望您的
操作
函数将div保持为
并且仍然接受jQuery事件对象,可以使用如下示例:

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);
    }
})
功能动作(另一个,事件){
log(这个,参数);
}
$(函数(){

对于(var i=0;一旦执行匿名函数,icallback也将超出范围,这将不起作用。当此循环结束时,
i
将超出数组的边界,并且
some.object.array[i]
将返回
undefined
。另外,由于您在
for
循环中附加处理程序,它们都将使用此
undefined
值。谢谢,现在应该可以修复了。实现有点复杂,但毕竟是可行的!谢谢,知道如何称呼这种方法(方法1)
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));
}
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);
    }
})