2011-02-01 85 views
5

我有一個坐在父javascript函數中的$ .each jQuery函數,如何在某個索引(i)時打破父函數?jQuery的父函數每個函數

+1

你所說的「打破父功能」是什麼意思?你的意思是「返回父功能」? – lonesomeday 2011-02-01 22:58:07

回答

5

從它的聲音,你有這樣的事情:

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

你想從outer返回時,內循環達到一定值。你不能一氣呵成。關鍵是,從$.each回調做return false結束「循環」。然後,您可以設置一個變量有條件返回,如果你需要的是:

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 
} 
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; 
    } 
}); 
+2

Aahahaaha哦上帝 – david 2011-02-01 23:04:17

+1

OP沒有提到每個循環的「多個」。 – jAndy 2011-02-01 23:05:18

0

我能想到的在父功能被設置變量(切換)中,在每個功能,若設爲i == X,爆發的唯一的解決方案每個功能在改變開關之後首先...然後檢查開關值以確定是否突破父功能。

0

,你會做這樣的事情:

function foo() { 

var success = true; 

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

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

}); 

if (!success) 
    return false; 

//should not get here 
} 
0

標籤break

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