对于循环保存值

时间:2016-02-09 13:42:06

标签: javascript for-loop

如何在for循环中保存价值?这是我的问题:

var n = $('ul#myID li').lenght;
var placetop = $('.position-for-li').offset().top;
var place = $('.position-for-li').offset().left;
for ( var y=0;y<n ;y++) {
 var pos = $('.list-update li:eq(' + y + ')').offset().left;
var postop = $('.list-update li:eq(' + y + ')').offset().top;
 var sumleft = place - pos;
 var sumtop = placetop - postop;
 alert(sumleft);
}
$('#myID li').click(function() {
     var X = $(this).prevAll().length;
     if ( X == 0) {
       $(this).animate({
          'left': test, <----- HERE VALUE FROM MY LOOP SUMLEFT
          'top' : test2 <----- HERE VALUE FROM MY LOOP SUMTOP
       });
     } else if ( X == 1) {
           $(this).animate({
          'left': test, <----- HERE VALUE FROM MY LOOP SUMLEFT
          'top' : test2  <----- HERE VALUE FROM MY LOOP SUMTOP
    } 

});

因此,在第一部分中,我想要计算我应该向左和顶部添加多少px。然后我使用点击功能到我的李图像,它移动到正确的位置。

4 个答案:

答案 0 :(得分:0)

将你的return sumleft语句放在for循环之外,并在for循环之外执行声明,如下所示

var n = $('ul#myID li').size();  // it's return how long is my LI = 3 
var placetop = $('.position-for-li').offset().top; // Give me a position of my li 
var place = $('.position-for-li').offset().left; // give me a position of my special space for new position li 
var sumleft=0, sumtop=0;
for ( var y=0;y<n ;y++) {
 var pos = $('.list-update li:eq(' + y + ')').offset().left; 
 var postop = $('.list-update li:eq(' + y + ')').offset().top;
 sumleft += place - pos; // it say me how much i should add to my li to move it 
 sumtop += placetop - postop; //

}
return sumleft;

答案 1 :(得分:0)

你在循环中的return语句是一个错误。把它带到外面......

function myListStuff(){
    var placetop = $('.position-for-li').offset().top;
    var place = $('.position-for-li').offset().left;
    $('ul#myID li').forEach(function(li, index){
        var pos = $('.list-update li:eq(' + index + ')').offset().left;
        var postop = $('.list-update li:eq(' + index + ')').offset().top;
        var sumleft = place - pos;
        var sumtop = placetop - postop;
    })
    return sumleft
}

答案 2 :(得分:0)

您的for loop看起来的目的是计算新元素的位置,但您似乎无法将它们设置在任何位置。您可以使用计算结果而不是返回值吗?

for (var y=0;y<n ;y++) {
   var pos = $('.list-update li:eq(' + y + ')').offset().left; 
   var postop = $('.list-update li:eq(' + y + ')').offset().top;
   var sumleft = place - pos; // it say me how much i should add to my li to move it 
   var sumtop = placetop - postop; //

   // set the top and left css properties of elements: 
   // .myElementToPosition0, .myElementToPosition1, .myElementToPosition2
   $('.myElementToPosition' + y).css({
       'left': sumleft + 'px', 
       'top': sumtop + 'px'
   });
}

如果这没有帮助,也许你可以添加一个简短的描述来解释你想要用计算循环中的值发生什么。

答案 3 :(得分:-1)

好的男人让我们看看..

如果你在你的for中设置一个var,那么该值将被删除,所以首先声明该值

var n = $('ul#myID li').size();  // it's return how long is my LI = 3 
var placetop = $('.position-for-li').offset().top; // Give me a position of my li 
var place = $('.position-for-li').offset().left; // give me a position of my special space for new position li 

var sumleft,
    sumtop;

for ( var y=0;y<n ;y++) {
 var pos = $('.list-update li:eq(' + y + ')').offset().left; 
 var postop = $('.list-update li:eq(' + y + ')').offset().top;

sumleft = place - pos;
sumtop = placetop - postop; 
}
//use sumleft and sumtop with new values

请记住,如果他们在本地分配,那么vars只适用于你们。 和if()else一样:

EXAMPLE
var x=0
for(var i=0; i<5;i++){
   x++;
var y=0;
   y++;
}
alert(x); -> x+1 for five times (5)
alert(y); -> undefined
var y=0;
alert(y); -> 0