2011-02-01 11 views

Respuesta

5

Desde el sonido de la misma, que tenga algo como esto:

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

¿Quieres volver de outer cuando el bucle interno alcanza un determinado valor . No puedes hacer esto de una vez. El punto clave es que al hacer return false desde la callback $.each finaliza el "bucle". A continuación, puede establecer una variable para volver condicional si necesita que:

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 
} 
+0

¿hay alguna diferencia por vuelta y la devolución es falsa? – bcm

+0

@Brandon En el controlador '$ .each', debe devolver' false' para romper el ciclo. Si pudieras dar un ejemplo más preciso de lo que estás haciendo, sería más fácil darte una respuesta más precisa. – lonesomeday

10

de romper un bucle, vuelve false:

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

de romper/regreso de múltiples each bucles a la vez, acaba de lanzar una excepción:

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

Y atraparlo en el loop al que desea regresar.

Así es como Prototype.js implements break, en su Enumerable.each(), por ejemplo.

Una solución más convencional:

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 oh dios – david

+1

OP no mencionó "múltiples" cada bucles. – jAndy

+0

@jAndy ah, derecha – arnaud576875

0

La única solución que se me ocurre es establecer una variable (interruptor) de la función de los padres, en el cada función, si i == x, salir de la cada función primero después de cambiar el interruptor ... luego verifica el valor del interruptor para determinar si se saldrá de la función principal.

0

que haría algo como:

function foo() { 

var success = true; 

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

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

}); 

if (!success) 
    return false; 

//should not get here 
} 
0

Etiquetada rotura

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