打破jQuery每个函数的父函数

时间:2011-02-01 22:57:17

标签: javascript jquery

我有一个$ .each jQuery函数坐在父javascript函数中,如何在某个索引(i)上打破父函数?

5 个答案:

答案 0 :(得分:10)

要从一个循环中断,只需返回false

$('something').each(function() {
    if (need_to_break) {
        return false; // returning false stops the loop
    }
});

要立即从多个each循环中断/返回,只需抛出异常:

var $break = {};
$('something').each(function() {
    try {
        $('something').each(function() {
            $('something').each(function() {
                $('something').each(function() {
                    throw $break;
                });
            });
        });
    } catch(E) {
        if (E != $break) throw E;
    }
});

然后在想要返回的循环中抓住它。

这就是Prototype.js implements break,例如Enumerable.each()

更传统的解决方案:

var do_break = false;
$('something').each(function() {
    $('something').each(function() {
        $('something').each(function() {
            $('something').each(function() {
                do_break = true;
                return false;
            });
            if (do_break) {
                return false;
            }
        });
        if (do_break) {
            return false;
        }
    });
    if (do_break) {
        return false;
    }
});

答案 1 :(得分:6)

从它的声音来看,你有类似的东西:

function outer(someParam) {
    $.each(someParam, function(i) {
        // do something with each value in someParam
    });
}

当内循环达到某个值时,您希望从outer返回。你不能一气呵成。关键点是从return false回调中执行$.each会结束“循环”。然后,如果需要,可以设置变量以有条件地返回:

function outer(someParam) {
    var returnNow = false;
    $.each(someParam, function(i) {
        if (i === 5) {
            returnNow = true;
            return false;
        }

        // do something with each value in someParam
    });

    if (returnNow) {
        return;
        // return immediately
    }

    // do some other action if you want to
}

答案 2 :(得分:0)

我能想到的唯一解决方案是在父函数上设置一个变量(开关),在每个函数中,如果i == x,在更改开关后先断开每个函数...然后检查switch值确定是否中断父函数。

答案 3 :(得分:0)

你会做类似的事情:

function foo() {

var success = true;

$('element').each(function() {

    if (condition) {
        success = false;
        return success;
    }

});

if (!success)
   return false;

//should not get here
}

答案 4 :(得分:0)

标记休息

outerloop:
for (;;) 
{
    for (;;) 
    {
        break; /* breaks inner loop */
    } 
    for (;;) 
    {
        break outerloop; /* breaks outer loop */
    }
}