ตราบใดที่ตัวเลือกของคุณใช้งานได้จริงฉันไม่เห็นอะไรผิดปกติกับโค้ดของคุณที่ตรวจสอบความยาวของอาร์เรย์ นั่นควรทำในสิ่งที่คุณต้องการ มีหลายวิธีในการล้างโค้ดของคุณให้ง่ายขึ้นและอ่านง่ายขึ้น นี่คือเวอร์ชันที่ล้างข้อมูลพร้อมบันทึกเกี่ยวกับสิ่งที่ฉันทำความสะอาด
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[]']")
?