Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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/68.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,我正在导入#parentEle的子对象,制作每个对象的副本,并将复制的对象推送到具有新ID-#eleCopy(I) 我还试图为导入的原始对象指定一个单击函数。单击它将更改其副本(从数组引用)的CSS。但是受影响的副本总是最后一个加载的副本。我希望通过数组中的索引号来引用它。。。如何在click函数中“冻结”正确的数组引用,以便$(this)0对应于ar[0]、$(this)`1对应于ar[1]等等 var ar = []; var i = 0; $('#parentEle').children

我正在导入
#parentEle
的子对象,制作每个对象的副本,并将复制的对象推送到具有新
ID
-
#eleCopy(I)

我还试图为导入的原始对象指定一个单击函数。单击它将更改其副本(从数组引用)的CSS。但是受影响的副本总是最后一个加载的副本。我希望通过数组中的索引号来引用它。。。如何在click函数中“冻结”正确的数组引用,以便
$(this)
0对应于ar[0]、$(this)`1对应于ar[1]等等

var ar = [];
var i = 0;

$('#parentEle').children().each(function() {

        ... // copy of $(this) is created: $('#eleCopy'+i)

        ar.push($('#eleCopy'+i));


        $(this).on('click', function() {

            ar[i].css({ ... });

        });

        i++;

});

有关问题的解释,请参见以下问题:

在您的情况下,解决方案非常简单:因为您已经在使用,所以不需要保留外部计数器。当前索引作为参数传递给回调:

// method signature: each( function(index, Element) )
$('#parentEle').children().each(function(i) {
    ... // copy of $(this) is created: $('#eleCopy'+i)
    ar.push($('#eleCopy'+i));

    $(this).on('click', function() {
        ar[i].css({ ... });
    });
});
但是,问题是您是否需要通过阵列引用克隆。要访问事件处理程序中的克隆,您可以直接引用它:

$('#parentEle').children().each(function(i) {
    var $copy = ...; // copy of $(this) is created: $('#eleCopy'+i)
    $(this).on('click', function() {
        $copy.css({ ... });
    });
});
这是因为绑定的事件处理程序是一个闭包

这两种解决方案的一个缺点是,您在每次迭代中创建一个新的事件处理程序,即使它们都做相同的事情。您可以利用jQuery存储对原始节点克隆的引用,并将单个事件处理程序绑定到元素:

$('#parentEle').children().each(function(i) {
    var $copy = ...; // copy of $(this) is created: $('#eleCopy'+i)
    $(this).data('copy', $copy);
}).on('click', function() {
    $(this).data('copy').css({ ... });
});

有关问题的解释,请参见以下问题:

在您的情况下,解决方案非常简单:因为您已经在使用,所以不需要保留外部计数器。当前索引作为参数传递给回调:

// method signature: each( function(index, Element) )
$('#parentEle').children().each(function(i) {
    ... // copy of $(this) is created: $('#eleCopy'+i)
    ar.push($('#eleCopy'+i));

    $(this).on('click', function() {
        ar[i].css({ ... });
    });
});
但是,问题是您是否需要通过阵列引用克隆。要访问事件处理程序中的克隆,您可以直接引用它:

$('#parentEle').children().each(function(i) {
    var $copy = ...; // copy of $(this) is created: $('#eleCopy'+i)
    $(this).on('click', function() {
        $copy.css({ ... });
    });
});
这是因为绑定的事件处理程序是一个闭包

这两种解决方案的一个缺点是,您在每次迭代中创建一个新的事件处理程序,即使它们都做相同的事情。您可以利用jQuery存储对原始节点克隆的引用,并将单个事件处理程序绑定到元素:

$('#parentEle').children().each(function(i) {
    var $copy = ...; // copy of $(this) is created: $('#eleCopy'+i)
    $(this).data('copy', $copy);
}).on('click', function() {
    $(this).data('copy').css({ ... });
});

有关问题的解释,请参见以下问题:

在您的情况下,解决方案非常简单:因为您已经在使用,所以不需要保留外部计数器。当前索引作为参数传递给回调:

// method signature: each( function(index, Element) )
$('#parentEle').children().each(function(i) {
    ... // copy of $(this) is created: $('#eleCopy'+i)
    ar.push($('#eleCopy'+i));

    $(this).on('click', function() {
        ar[i].css({ ... });
    });
});
但是,问题是您是否需要通过阵列引用克隆。要访问事件处理程序中的克隆,您可以直接引用它:

$('#parentEle').children().each(function(i) {
    var $copy = ...; // copy of $(this) is created: $('#eleCopy'+i)
    $(this).on('click', function() {
        $copy.css({ ... });
    });
});
这是因为绑定的事件处理程序是一个闭包

这两种解决方案的一个缺点是,您在每次迭代中创建一个新的事件处理程序,即使它们都做相同的事情。您可以利用jQuery存储对原始节点克隆的引用,并将单个事件处理程序绑定到元素:

$('#parentEle').children().each(function(i) {
    var $copy = ...; // copy of $(this) is created: $('#eleCopy'+i)
    $(this).data('copy', $copy);
}).on('click', function() {
    $(this).data('copy').css({ ... });
});

有关问题的解释,请参见以下问题:

在您的情况下,解决方案非常简单:因为您已经在使用,所以不需要保留外部计数器。当前索引作为参数传递给回调:

// method signature: each( function(index, Element) )
$('#parentEle').children().each(function(i) {
    ... // copy of $(this) is created: $('#eleCopy'+i)
    ar.push($('#eleCopy'+i));

    $(this).on('click', function() {
        ar[i].css({ ... });
    });
});
但是,问题是您是否需要通过阵列引用克隆。要访问事件处理程序中的克隆,您可以直接引用它:

$('#parentEle').children().each(function(i) {
    var $copy = ...; // copy of $(this) is created: $('#eleCopy'+i)
    $(this).on('click', function() {
        $copy.css({ ... });
    });
});
这是因为绑定的事件处理程序是一个闭包

这两种解决方案的一个缺点是,您在每次迭代中创建一个新的事件处理程序,即使它们都做相同的事情。您可以利用jQuery存储对原始节点克隆的引用,并将单个事件处理程序绑定到元素:

$('#parentEle').children().each(function(i) {
    var $copy = ...; // copy of $(this) is created: $('#eleCopy'+i)
    $(this).data('copy', $copy);
}).on('click', function() {
    $(this).data('copy').css({ ... });
});
为什么不:

$('#parentEle').find('[id^="eleCopy"]').each(function() {
    $(this).css({ ... });
}

为什么不:

$('#parentEle').find('[id^="eleCopy"]').each(function() {
    $(this).css({ ... });
}

为什么不:

$('#parentEle').find('[id^="eleCopy"]').each(function() {
    $(this).css({ ... });
}

为什么不:

$('#parentEle').find('[id^="eleCopy"]').each(function() {
    $(this).css({ ... });
}


这是一个范围问题

当click事件发生并执行
ar[i].css({…})
时,所有对

i++;
所以
i
等于
#parentEle

为了获得所需的行为,请将代码包装在闭包中:

替换

$(this).on('click', function() {
    ar[i].css({ ... });
});


有关javascript闭包的更多信息,

这是一个范围问题

当click事件发生并执行
ar[i].css({…})
时,所有对

i++;
所以
i
等于
#parentEle

为了获得所需的行为,请将代码包装在闭包中:

替换

$(this).on('click', function() {
    ar[i].css({ ... });
});


有关javascript闭包的更多信息,

这是一个范围问题

当click事件发生并执行
ar[i].css({…})
时,所有对

i++;
所以
i
等于
#parentEle

为了获得所需的行为,请将代码包装在闭包中:

替换

$(this).on('click', function() {
    ar[i].css({ ... });
});


有关javascript闭包的更多信息,

这是一个范围问题

当click事件发生并执行
ar[i].css({…})
时,所有对

i++;
所以
i
等于
#parentEle

为了获得所需的行为,请将代码包装在闭包中:

替换

$(this).on('click', function() {
    ar[i].css({ ... });
});


有关javascript闭包的更多信息,

为什么要将其复杂化?您也可以使用事件委派单独分配单击事件。为什么要将此复杂化?您也可以使用事件委派单独分配单击事件。为什么要将此复杂化?您可以指定