一旦jQuery while循环完成,就会激活回调

时间:2013-07-04 11:39:24

标签: jquery callback while-loop jquery-callback

我正在尝试在jQuery循环完成其设置循环后执行一个函数。循环靠近底部

这是我目前的剧本:

$(document).ready(function() {


$("#radial_container").radmenu({
    listClass: 'list', // the list class to look within for items
    itemClass: 'item', // the items - NOTE: the HTML inside the item is copied into the menu item
    radius: 150, // radius in pixels
    animSpeed:400, // animation speed in millis
    centerX: 160, // the center x axis offset
    centerY: 150, // the center y axis offset
    selectEvent: "click", // the select event (click)
    activeItemClass: "active",
    angleOffset: 185, // in degrees
    onSelect: function ($selected) {
        $(".radial_div_item").animate({
            //opacity: 0.5
        }, 0);
        $selected.animate({
            //opacity: 1
        }, 0);
        var inner = $selected.html();
        var i = 0;
        if ($selected.index() > 3) {
            while (i < $selected.index()) {
                $("#radial_container").radmenu("next");
                //Do something once loop finishes
            }
        } else {
            while ($selected.index() > i) {
                $("#radial_container").radmenu("prev");
                //Do something once loop finishes
            }
        }
    }

});
});

一位朋友建议我做这样的事情,但到目前为止它对我没用:

var looping = function(callback){ 
  *while loop* 
  callback();
}

我已阅读过这篇文章,但无法找到解决方案,其中linke是here

我没有包含我的标记,因为它似乎没有必要,但如果需要我可以发布它。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

首先,看起来你的循环正在重新开始,永远不会结束。

while ($selected.index() > i) {
    $("#radial_container").radmenu("prev");
    //Do something once loop finishes
}

除非此代码$("#radial_container").radmenu("prev");自动递增index() $selected,否则此循环将继续播放,因此您需要查看手动递增$selected.index()或{每次迭代循环后{1}}。

但是这个问题的答案很简单,你不必在循环中运行你的函数,你可以在循环之外但在if语句中运行它。所以一旦循环完成迭代,函数就会运行,就像这样。

i

我希望有所帮助。

答案 1 :(得分:0)

但如果你不像那样包装它:

while ($selected.index() > i) {
    $("#radial_container").radmenu("prev");
}
//Do something once loop finishes

它会起作用!或者我错过了什么?