Miễn là bộ chọn của bạn thực sự hoạt động, tôi thấy mã kiểm tra độ dài của mảng của bạn không có gì sai. Điều đó sẽ làm những gì bạn muốn. Có rất nhiều cách để làm sạch mã của bạn để trở nên đơn giản và dễ đọc hơn. Đây là phiên bản đã được làm sạch với các ghi chú về những gì tôi đã dọn dẹp.
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
}
Một số ghi chú về những gì bạn đang làm và những gì tôi đã thay đổi.
$(this)
luôn là một đối tượng jQuery hợp lệ nên không có lý do gì để kiểm tra if ($(this))
. Nó có thể không có bất kỳ đối tượng DOM nào bên trong nó, nhưng bạn có thể kiểm tra điều đó $(this).length
nếu cần, nhưng điều đó không cần thiết ở đây vì .each()
vòng lặp sẽ không chạy nếu không có mục nên $(this)
bên trong .each()
vòng lặp của bạn sẽ luôn có một cái gì đó.
- Sẽ không hiệu quả nếu sử dụng $ (this) nhiều lần trong cùng một hàm. Tốt hơn nhiều là đưa nó một lần vào một biến cục bộ và sau đó sử dụng nó từ biến cục bộ đó.
- Bạn nên khởi tạo mảng bằng
[]
thay vì new Array()
.
if (value)
khi giá trị được kỳ vọng sẽ là một chuỗi sẽ vừa bảo vệ từ value == null
, value == undefined
và value == ""
do đó bạn không cần phải làm if (value && (value != ""))
. Bạn chỉ có thể làm: if (value)
để kiểm tra tất cả ba điều kiện trống.
if (album_text.length === 0)
sẽ cho bạn biết liệu mảng có trống không miễn là nó là một mảng hợp lệ, được khởi tạo (nó ở đây).
Bạn đang cố gắng làm gì với bộ chọn này $("input[name='album_text[]']")
?