วิธีการตรวจสอบว่าผู้ใช้ได้เลือกไฟล์สำหรับการอัปโหลดในฟอร์ม HTML
การจัดการการอัปโหลดไฟล์ในแอพพลิเคชันเว็บเป็นความต้องการทั่วไป ด้วยความที่เบราว์เซอร์แต่ละตัวตีความ HTML ต่างกัน นักพัฒนามักเผชิญกับอุปสรรคในการรับประกันว่าแอพพลิเคชันทำงานอย่างราบรื่นในทุกสภาพแวดล้อม บทความนี้ตอบคำถามที่พบบ่อย: ฉันจะตรวจสอบได้อย่างไรว่าผู้ใช้ได้เลือกไฟล์สำหรับการอัปโหลดในฟอร์ม HTML?
การทำความเข้าใจกับปัญหา
เมื่อจัดการกับไฟล์อินพุต คุณอาจคิดว่าการตรวจสอบว่าได้เลือกไฟล์หรือไม่เป็นเรื่องง่าย สำหรับเบราว์เซอร์สมัยใหม่เช่น Firefox (FF) การตรวจสอบว่าผู้ใช้ได้เลือกไฟล์โดยใช้คุณสมบัติ .files
นั้นค่อนข้างง่าย อย่างไรก็ตาม Internet Explorer (IE) โดยเฉพาะเวอร์ชันเก่ามีความท้าทายเฉพาะ
โครงสร้าง HTML
นี่คือโครงสร้าง HTML ที่เรากำลังทำงานอยู่:
<input id="uploadFile" type="file" />
<button id="submitBtn">ยืนยัน</button>
โค้ดนี้สร้างอินพุตไฟล์สำหรับผู้ใช้ในการอัปโหลดไฟล์และปุ่มยืนยันที่จะทำการดำเนินการต่อไป
วิธีการมาตรฐานสำหรับเบราว์เซอร์สมัยใหม่
ในเบราว์เซอร์สมัยนิยมส่วนใหญ่ การตรวจสอบว่ามีการเลือกไฟล์สามารถทำได้ด้วยการตรวจสอบง่าย ๆ:
var selected = document.getElementById("uploadFile").files.length > 0;
ในโค้ดนี้:
- คุณสมบัติ
files
จะส่งคืนวัตถุFileList
- โดยการตรวจสอบ
length
ของมัน เราสามารถระบุได้ว่าผู้ใช้ได้เลือกไฟล์หรือไม่
อย่างไรก็ตาม วิธีนี้ใช้ไม่ได้ผลใน Internet Explorer เวอร์ชันเก่า
ทางออกสำหรับ Internet Explorer
เพื่อรองรับ IE (และรับประกันความเข้ากันได้กับ Firefox) คุณสามารถใช้วิธีการที่แตกต่างกัน Internet Explorer ไม่สนับสนุนคุณสมบัติ files
แต่คุณสามารถตรวจสอบ value
ของอินพุตเพื่อดูว่ามีการเลือกไฟล์หรือไม่:
if (document.getElementById("uploadFile").value != "") {
// มีไฟล์ถูกเลือก
}
การอธิบายโค้ด
- เข้าถึงองค์ประกอบอินพุต: ใช้
document.getElementById("uploadFile")
เพื่อดึงองค์ประกอบไฟล์อินพุต - ตรวจสอบค่า: คุณสมบัติ
.value
จะมีเส้นทางของไฟล์ที่เลือก หากไม่ใช่สตริงว่าง มันแสดงว่าได้มีการเลือกไฟล์
การรวมวิธีเพื่อลดความเข้ากันได้
เพื่อให้ทางออกของคุณทำงานได้ในทุกเบราว์เซอร์ รวมถึง IE และเบราว์เซอร์สมัยใหม่ คุณสามารถรวมทั้งสองวิธี:
var fileInput = document.getElementById("uploadFile");
var isFileSelected = (fileInput.files && fileInput.files.length > 0) || (fileInput.value !== "");
if (isFileSelected) {
// จัดการตรรกะการอัปโหลดไฟล์ที่นี่
}
การแบ่งโครงสร้างของวิธีนี้:
- การตรวจจับฟีเจอร์: ก่อนอื่นตรวจสอบการมีอยู่ของคุณสมบัติ
files
เพื่อดูว่าเบราว์เซอร์สนับสนุนหรือไม่ - fallback สำหรับเบราว์เซอร์เก่า: หากคุณสมบัตินี้ไม่มีอยู่ (ตามที่เกิดขึ้นใน IE เวอร์ชันเก่า) เราจะตรวจสอบที่ค่า
สรุป
การรับประกันว่าแอพพลิเคชันเว็บของคุณสามารถตรวจสอบได้อย่างแม่นยำว่าผู้ใช้ได้เลือกไฟล์สำหรับอัปโหลดเป็นสิ่งสำคัญในการนำเสนอประสบการณ์ผู้ใช้ที่ราบรื่น โดยการใช้ทั้งคุณสมบัติ files
และการตรวจสอบแอตทริบิวต์ value
คุณสามารถสร้างทางออกที่แข็งแกร่งซึ่งทำงานในทุกเบราว์เซอร์หลัก
อย่าลืมว่าขณะจัดการการอัปโหลดไฟล์ ให้คำนึงถึงประสบการณ์ของผู้ใช้และให้ข้อเสนอสำหรับการเลือกอย่างชัดเจน ขอให้สนุกกับการเขียนโค้ด!