Як вийти з eachциклу jQuery ?
Я намагався:
return false;
У циклі, але це не спрацювало. Будь-які ідеї?
return falseнеправильне місце. Коли я зафіксував це, все спрацювало.
return falseщо не працює $().each- тому що це так.
Як вийти з eachциклу jQuery ?
Я намагався:
return false;
У циклі, але це не спрацювало. Будь-які ідеї?
return falseнеправильне місце. Коли я зафіксував це, все спрацювало.
return falseщо не працює $().each- тому що це так.
Відповіді:
Для breakбільш $.eachабо $(selector).eachпетлі, ви повинні повернутися falseдо функцій зворотного виклику циклу.
Повернення trueпереходить до наступної ітерації, еквівалентної а continueв звичайному циклі.
$.each(array, function(key, value) {
if(value === "foo") {
return false; // breaks
}
});
// or
$(selector).each(function() {
if (condition) {
return false;
}
});
falseв циклі зворотного виклику." Де саме це?
$.each(array, function(key, value) { if(value == "foo") return false; });
$().eachробиться точно так само, ваша редакція служить лише для плутанини.
Згідно з документацією return false;слід виконати роботу.
Ми можемо зламати цикл $ .each () [..], зробивши функцію зворотного виклику поверненням помилковою.
Повернути помилку в зворотному дзвінку:
function callback(indexInArray, valueOfElement) {
var booleanKeepGoing;
this; // == valueOfElement (casted to Object)
return booleanKeepGoing; // optional, unless false
// and want to stop looping
}
До речі, continueпрацює так:
Повернення non-false - це те саме, що оператор продовження у циклі for; вона перейде негайно до наступної ітерації.
Я створив Fiddle для відповіді на це запитання, оскільки прийнята відповідь невірна, плюс це перший потік StackOverflow, який повернувся з Google щодо цього питання.
Щоб вирватися з $ .each, ви повинні використовувати return false;
Ось Fiddle, що підтверджує це:
Я натрапив на ситуацію, коли я зустрів умову, яка порушила цикл, проте код після функції .each () все ще виконується. Потім я встановив прапор "true", негайно перевіривши прапор після функції .each (), щоб переконатися, що наступний код не був виконаний.
$('.groupName').each(function() {
if($(this).text() == groupname){
alert('This group already exists');
breakOut = true;
return false;
}
});
if(breakOut) {
breakOut = false;
return false;
}
"кожен" використовує функцію зворотного дзвінка. Функція зворотного дзвінка виконується незалежно від функції виклику, тому повернутися до функції виклику з функції зворотного дзвінка неможливо.
використовувати для циклу, якщо вам доведеться зупинити виконання циклу на основі якоїсь умови та залишитися в тій самій функції.
Я знаю його досить давнє запитання, але я не побачив жодної відповіді, яка б пояснила, чому і коли можна розірватися із поверненням.
Я б хотів пояснити це двома простими прикладами:
1. Приклад. У цьому випадку ми маємо просту ітерацію, і ми хочемо розірвати з поверненням true, якщо зможемо знайти три.
function canFindThree() {
for(var i = 0; i < 5; i++) {
if(i === 3) {
return true;
}
}
}
якщо ми називаємо цю функцію, вона просто поверне справжню.
2. Приклад У цьому випадку ми хочемо повторити кожну функцію jquery , яка приймає анонімну функцію як параметр.
function canFindThree() {
var result = false;
$.each([1, 2, 3, 4, 5], function(key, value) {
if(value === 3) {
result = true;
return false; //This will only exit the anonymous function and stop the iteration immediatelly.
}
});
return result; //This will exit the function with return true;
}