我有以下代码
for (var i = 0; i < that.$el.mini.length; i++) {
var pag = that.$el.mini[i].pagination;
// Mini-Slider Pagination
$('li', pag).each( function(j, el) {
$(el).click( function() {
/*
* Toggle Mini-Slide
*/
that.slider_fn.mini.show(i, j);
return false;
});
});
}
所以,基本上,我想要做的是在单击元素时运行此函数that.slider_fn.mini.show(i, j);
。
问题是我想使用变量i
,它在循环中更改其值。单击元素后,i
将被视为最新数字,即that.$el.mini.length
。
如何使JavaScript(或函数)记住该特定数字?
答案 0 :(得分:4)
使用闭包来关闭i
的值:
$(el).click( (function(i_){
return function() {
that.slider_fn.mini.show(i_, j);
return false;
};
})(i));
事先,您的函数引用了名为i
的变量,现在每次迭代时都会创建一个引用i_
的新函数,并且此变量对每个函数都是唯一的,并引用{{i
的值。 1}}创建函数时。
答案 1 :(得分:2)
您需要创建一个函数闭包,并将要保留的变量作为参数传递,如下所示:
for (var i = 0; i < that.$el.mini.length; i++) {
var pag = that.$el.mini[i].pagination;
$('li', pag).each(function (j, el) {
// function closure to persist i, j, and el
(function (idx, jdx, elem) {
$(elem).click(function () {
that.slider_fn.mini.show(idx, jdx);
return false;
});
} (i, j, el));
});
}
答案 2 :(得分:1)
给出的闭包答案是解决问题的常规方法,但如果您不关心自我调用的匿名函数,您可以考虑使用forEach()
:
that.$el.mini.forEach(function (element,i){
var pag = element.pagination;
// Mini-Slider Pagination
$('li', pag).each( function(j, el) {
$(el).click( function() {
/*
* Toggle Mini-Slide
*/
that.slider_fn.mini.show(i, j);
return false;
});
});
}) ;
警告: forEach()
未在所有浏览器中实施。您可以看到如何填充它,如https://developer.mozilla.org/en/JavaScript/Reference/global_objects/array/foreach
答案 3 :(得分:0)
这假设pag是一个元素,并且您正在使用jquery。
for(var i = 0; i&lt; that。$ el.mini.length; i ++){
var pag = that.$el.mini[i].pagination;
// Mini-Slider Pagination
$('li', pag).each( function(j, el) {
$(el).data('page-index', i); // add data to the element being clicked
$(el).click( function() {
/*
* Toggle Mini-Slide
*/
that.slider_fn.mini.show($(this).data('page-index'), j);
return false;
});
});
}