ฉันจะแยก jQuery each
loop ออกจากกันได้อย่างไร
ฉันเหนื่อย:
return false;
ในวง แต่มันไม่ทำงาน ความคิดใด ๆ
return false
ผิดที่ เมื่อฉันคงได้ทำงานทุกอย่าง
return false
ใช้งานไม่ได้$().each
- เพราะเป็นเช่นนั้น
ฉันจะแยก jQuery each
loop ออกจากกันได้อย่างไร
ฉันเหนื่อย:
return false;
ในวง แต่มันไม่ทำงาน ความคิดใด ๆ
return false
ผิดที่ เมื่อฉันคงได้ทำงานทุกอย่าง
return false
ใช้งานไม่ได้$().each
- เพราะเป็นเช่นนั้น
คำตอบ:
ไปที่break
a $.each
หรือ$(selector).each
loop คุณจะต้องย้อนกลับไปfalse
ที่ loop callback
กลับtrue
ไปที่การวนซ้ำครั้งถัดไปเทียบเท่ากับ a continue
ในลูปปกติ
$.each(array, function(key, value) {
if(value === "foo") {
return false; // breaks
}
});
// or
$(selector).each(function() {
if (condition) {
return false;
}
});
false
in the loop callback" อยู่ที่ไหนนี่
$.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
}
BTW continue
ทำงานเช่นนี้:
การส่งคืน non-false จะเหมือนกับคำสั่ง continue ใน a for loop; มันจะข้ามไปยังการทำซ้ำครั้งถัดไปทันที
ฉันสร้าง Fiddle สำหรับคำตอบสำหรับคำถามนี้เพราะคำตอบที่ยอมรับนั้นไม่ถูกต้องและนี่เป็น StackOverflow เธรดแรกที่ส่งคืนจาก Google เกี่ยวกับคำถามนี้
เพื่อแยกออกจาก $. แต่ละคุณต้องใช้ return false;
นี่เป็นซอพิสูจน์มัน:
ฉันเจอสถานการณ์ที่พบเงื่อนไขที่ทำให้เกิดการวนซ้ำอย่างไรก็ตามรหัสหลังจากฟังก์ชัน. 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;
}
"แต่ละ" ใช้ฟังก์ชั่นการโทรกลับ ฟังก์ชั่นการโทรกลับดำเนินการโดยไม่คำนึงถึงฟังก์ชั่นการโทรดังนั้นจึงเป็นไปไม่ได้ที่จะกลับไปที่ฟังก์ชั่นการโทรจากฟังก์ชั่นการโทรกลับ
ใช้สำหรับลูปถ้าคุณต้องหยุดการประมวลผลลูปตามเงื่อนไขบางอย่างและยังคงอยู่ในฟังก์ชั่นเดียวกัน
ฉันรู้ว่ามันเป็นคำถามที่ค่อนข้างเก่า แต่ฉันไม่เห็นคำตอบใด ๆ ซึ่งชี้แจงว่าทำไมและเมื่อใดที่เป็นไปได้ที่จะทำลายด้วยการกลับมา
ฉันต้องการอธิบายด้วย 2 ตัวอย่างง่ายๆ:
1. ตัวอย่าง: ในกรณีนี้เรามีการทำซ้ำอย่างง่ายและเราต้องการทำลายด้วยการส่งคืนจริงถ้าเราสามารถหาทั้งสามได้
function canFindThree() {
for(var i = 0; i < 5; i++) {
if(i === 3) {
return true;
}
}
}
ถ้าเราเรียกฟังก์ชันนี้มันจะคืนค่าจริง
2. ตัวอย่าง ในกรณีนี้เราต้องการทำซ้ำกับ jquery's แต่ละฟังก์ชั่นซึ่งใช้ฟังก์ชั่นที่ไม่ระบุชื่อเป็นพารามิเตอร์
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;
}