ตราบใดที่ตัวเลือกของคุณใช้งานได้จริงฉันไม่เห็นอะไรผิดปกติกับโค้ดของคุณที่ตรวจสอบความยาวของอาร์เรย์ นั่นควรทำในสิ่งที่คุณต้องการ มีหลายวิธีในการล้างโค้ดของคุณให้ง่ายขึ้นและอ่านง่ายขึ้น นี่คือเวอร์ชันที่ล้างข้อมูลพร้อมบันทึกเกี่ยวกับสิ่งที่ฉันทำความสะอาด
var album_text = [];
$("input[name='album_text[]']").each(function() {
var value = $(this).val();
if (value) {
album_text.push(value);
}
});
if (album_text.length === 0) {
$('#error_message').html("Error");
}
else {
//send data
}
บันทึกบางส่วนเกี่ยวกับสิ่งที่คุณทำและสิ่งที่ฉันเปลี่ยนแปลง
$(this)มักจะเป็นวัตถุ jQuery if ($(this))ที่ถูกต้องจึงมีเหตุผลที่เคยตรวจสอบไม่มี อาจไม่มีวัตถุ DOM อยู่ข้างใน แต่คุณสามารถตรวจสอบได้ว่า$(this).lengthต้องการหรือไม่ แต่ไม่จำเป็นที่นี่เพราะ.each()ลูปจะไม่ทำงานหากไม่มีรายการดังนั้น$(this)ใน.each()ลูปของคุณจะเป็นบางอย่างเสมอ
- การใช้ $ (this) หลาย ๆ ครั้งในฟังก์ชันเดียวกันไม่มีประสิทธิภาพ ดีกว่ามากที่จะทำให้มันกลายเป็นตัวแปรท้องถิ่นแล้วใช้จากตัวแปรท้องถิ่นนั้น
- ก็แนะนำให้อาร์เรย์การเริ่มต้นที่มีมากกว่า
[]new Array()
if (value)เมื่อค่าที่คาดว่าจะเป็นสตริงทั้งจะปกป้องจากvalue == null, value == undefinedและเพื่อให้คุณไม่ต้องทำvalue == "" if (value && (value != ""))คุณสามารถทำได้: if (value)เพื่อตรวจสอบเงื่อนไขว่างทั้งสามเงื่อนไข
if (album_text.length === 0) จะบอกคุณว่าอาร์เรย์ว่างเปล่าตราบใดที่อาร์เรย์เป็นอาร์เรย์เริ่มต้นที่ถูกต้อง (ซึ่งอยู่ที่นี่)
สิ่งที่คุณพยายามจะทำอย่างไรกับตัวเลือกนี้$("input[name='album_text[]']")?