【问题标题】:JavaScript string and object in array数组中的 JavaScript 字符串和对象
【发布时间】:2013-02-17 16:01:02
【问题描述】:

我正在尝试将一些 div 动画从初始位置移动到其他位置。

为此,我正在改编这个小提琴的代码:

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 ids)硬编码如下;

 $('#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 类型的事情,因为因此回答了许多“类似”查询。但是,在这个方向上尝试了几件事后,我似乎仍然以字符串而不是“对象”结束。

【问题讨论】:

  • 请格式化您的代码示例
  • 请更新小提琴以展示您如何“从隐藏字段中检索 id 并构建数组”的示例
  • 另外,请使用描述性变量名称。如果您希望其他人能够阅读并帮助您编写代码,则 lll 和 ttt 不是好的变量名。
  • 感谢您的回复。所取的分数。我更关注数据问题,sdespont 已经给出了答案。沃尔特·威尔逊
  • sdespont - 只是回来感谢您发现问题和解决方案。沃尔特·威尔逊

标签: javascript arrays string object


【解决方案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);
    });
}

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2019-06-06
    • 2014-03-12
    • 2017-08-24
    • 2018-08-31
    相关资源
    最近更新 更多