2013-02-17 106 views
1

我试图从初始位置到其它位置动画一些div。JavaScript字符串和对象数组

对于这一点,我从这个小提琴适应代码:

http://jsfiddle.net/c6UEm/27/

我的代码是:

function animate(list, lft, top, callback) { 

alert('list: '+list); 

if (list.length === 0) { 
    callback(); 
    return; 
} 
$el = list.shift();   // div ids 
var lll = lft.shift(); // new value for left of this div (from lft array) 
var ttt = top.shift(); // new value for top of this div (from top array) 
$el.animate({"left": +lll+'px', "top": +ttt+'px'}, 1000, function() { 
    animate(list, lft, top, callback); 
}); 
} 

如果我硬编码 '列表'(div编号)如下;

 $('#TDA0mv'),$('#TDA1mv'),$('#TDA2mv'),$('#TDA3mv'),$('#TDA4mv'),$('#TDA5mv'),$('#TDA6mv'),$('#TDA7mv'),$('#TDA8mv') 

以上的警报产生这个;

list: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] 

它根据需要工作。

如果我检索来自一个隐藏字段的ID,并建立一个数组(或甚至一个字符串,它然后分裂)我有此;

  $('#TDA0mv'),$('#TDA1mv'),$('#TDA2mv'),$('#TDA3mv'),$('#TDA4mv'),$('#TDA5mv'),$('#TDA6mv'),$('#TDA7mv'),$('#TDA8mv') 

这在上述警报呼叫:

list:$('#TDA0mv'),$('#TDA1mv'),$('#TDA2mv'),$('#TDA3mv'),$('#TDA4mv'),$('#TDA5mv'),$('#TDA6mv'),$('#TDA7mv'),$('#TDA8mv') 

当然,这是行不通的。

有任何人任何想法,为什么看似相同的数据对象是如此的不同?我怀疑这可能是一个JSON类型的东西,因为许多'类似'的查询都是这样回答的。然而,在这个方向上尝试了几件事情后,我似乎仍然以字符串而不是“对象”结束。

+1

请格式化你的代码示例 – kirugan 2013-02-17 16:02:46

+1

请更新小提琴,以显示你是如何的例子“从一个隐藏字段检索ID和创建数组” – 2013-02-17 16:04:12

+1

另外,请使用描述性变量名称。如果你希望其他人能够阅读并帮助你使用你的代码,那么lll和ttt不是很好的变量名称。 – 2013-02-17 16:06:48

回答

1

您还没有解释如何传递ID,但你不能只用<input type="hidden" value="$('#id')" />,因为它会被解释为文本而不是jQuery对象。

你可以这样做:http://jsfiddle.net/c6UEm/28/

<body> 
    <div id="container"> 
    <div id="one" class="box"></div> 
    <div id="two" class="box"></div> 
    <div id="three" class="box"></div> 
    </div> 
    <!-- Create an input field--> 
    <input type="hidden" id="list" value=""/> 
</body> 

$(document).ready(function() { 
    //Assign id values 
    $('#list').val('one,two,three'); 

    //Pass the list to your function 
    animate($('#list').val().split(','), finished); 
}); 

function finished() { 
    $('body').append('Finished'); 
} 

function animate(list, callback) { 
    if (list.length === 0) { 
     callback(); 
     return; 
    } 

    //Use id to use with JQuery 
    $el = $('#' + list.shift()); 
    $el.animate({left: '+=200',top: '-=10'}, 1000, function() { 
     animate(list, callback); 
    }); 
}