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闭包的更多信息,为什么要将其复杂化?您也可以使用事件委派单独分配单击事件。为什么要将此复杂化?您也可以使用事件委派单独分配单击事件。为什么要将此复杂化?您可以指定