Codelab แนวทางปฏิบัติแนะนำสำหรับแบบฟอร์มที่อยู่

คุณจะออกแบบแบบฟอร์มที่เหมาะสำหรับชื่อและที่อยู่ต่างๆ ได้อย่างไร รูปแบบย่อย ข้อบกพร่องจะรบกวนผู้ใช้และอาจทำให้ผู้ใช้ออกจากเว็บไซต์หรือเลิกทำการซื้อ หรือลงชื่อสมัครใช้

Codelab นี้จะแสดงวิธีสร้างแบบฟอร์มที่ใช้งานง่ายและเข้าถึงได้ ซึ่งเหมาะสำหรับผู้ใช้ส่วนใหญ่

ขั้นตอนที่ 1: ใช้ประโยชน์สูงสุดจากองค์ประกอบและแอตทริบิวต์ HTML

คุณจะเริ่มต้นส่วนนี้ของ Codelab ด้วยแบบฟอร์มเปล่าที่มีเพียงส่วนหัวและปุ่มบน ได้เอง จากนั้นคุณจะเริ่มเพิ่มอินพุต (ทั้ง CSS และ JavaScript เพียงเล็กน้อยอยู่แล้ว included.)

  • คลิกรีมิกซ์เพื่อแก้ไขเพื่อทำให้โปรเจ็กต์แก้ไขได้

  • เพิ่มช่องชื่อในองค์ประกอบ <form> ด้วยโค้ดต่อไปนี้

<section>
  <label for="name">Name</label>
  <input id="name" name="name">
</section>

อาจจะดูซับซ้อนและซ้ำซ้อนสำหรับช่องชื่อเพียงช่องเดียว แต่ก็มีหลายอย่างแล้ว

คุณเชื่อมโยง label กับ input โดยการจับคู่แอตทริบิวต์ for ของ label กับ name หรือ id ของ input การแตะหรือการคลิกที่ป้ายกำกับจะย้ายโฟกัสไปยังอินพุต ทำให้มีขนาดใหญ่ขึ้นมาก กำหนดเป้าหมายมากกว่าอินพุตอย่างเดียว ซึ่งเหมาะกับนิ้วมือ นิ้วโป้ง และการคลิกเมาส์ โปรแกรมอ่านหน้าจอ ประกาศข้อความของป้ายกำกับเมื่อป้ายกำกับหรืออินพุตของป้ายกำกับอยู่ในโฟกัส

แล้ว name="name" ล่ะ นี่คือชื่อ (ซึ่งจะขึ้นต้นด้วย "ชื่อ") ที่เชื่อมโยงกับข้อมูล จากอินพุตนี้ซึ่งจะส่งไปยังเซิร์ฟเวอร์เมื่อมีการส่งแบบฟอร์ม รวมแอตทริบิวต์ name ซึ่งหมายความว่า FormData API จะเข้าถึงข้อมูลจากองค์ประกอบนี้ได้

ขั้นตอนที่ 2: เพิ่มแอตทริบิวต์เพื่อช่วยให้ผู้ใช้ป้อนข้อมูล

จะเกิดอะไรขึ้นเมื่อคุณแตะหรือคลิกส่วนป้อนชื่อใน Chrome คุณจะเห็นการป้อนข้อความอัตโนมัติ คำแนะนำที่เบราว์เซอร์ได้จัดเก็บไว้และเดาว่าเหมาะสำหรับอินพุตนี้ ค่า name และ id

ตอนนี้ให้เพิ่ม autocomplete="name" ลงในโค้ดอินพุตเพื่อให้มีลักษณะดังนี้

<section>
  <label for="name">Name</label>
  <input id="name" name="name" autocomplete="name">
</section>

โหลดหน้าเว็บซ้ำใน Chrome แล้วแตะหรือคลิกอินพุตชื่อ คุณเห็นความแตกต่างอะไรบ้าง

คุณจะเห็นการเปลี่ยนแปลงเล็กน้อย โดยเมื่อใช้ autocomplete="name" คำแนะนำจะเจาะจงมากขึ้นแล้ว ค่าที่ใช้ก่อนหน้านี้ในอินพุตแบบฟอร์มที่มี autocomplete="name" ด้วย เบราว์เซอร์ ไม่ใช่แค่การคาดเดาว่าอะไรเหมาะสม คุณเป็นผู้ควบคุม นอกจากนี้คุณจะเห็นปุ่มจัดการ... เพื่อดูและแก้ไขชื่อและที่อยู่ที่เบราว์เซอร์ของคุณจัดเก็บไว้

วันที่ ภาพหน้าจอ 2 ภาพของ Chrome ในโทรศัพท์ Android ที่แสดงแบบฟอร์มที่มีการป้อนข้อมูลเดียว พร้อมและไม่มีค่าการเติมข้อความอัตโนมัติ รายการหนึ่งแสดงค่าการแนะนำ UI ของเบราว์เซอร์ อีกเครื่องหนึ่งแสดง UI เมื่อมีค่าการเติมข้อความอัตโนมัติที่จัดเก็บไว้
UI สำหรับการป้อนข้อความอัตโนมัติด้วยค่าที่เดาได้เทียบกับการเติมข้อความอัตโนมัติ

ตอนนี้ ให้เพิ่มแอตทริบิวต์การตรวจสอบข้อจำกัด maxlength, pattern และ required โค้ดอินพุตจะมีลักษณะดังนี้

<section>
  <label for="name">Name</label>
  <input id="name" name="name" autocomplete="name"
    maxlength="100" pattern="[\p{L} \-\.]+" required>
</section>
  • maxlength="100" หมายความว่าเบราว์เซอร์จะป้อนอินพุตที่มีความยาวมากกว่า 100 อักขระไม่ได้

  • pattern="[\p{L} \-\.]+" ใช้นิพจน์ทั่วไปที่อนุญาตอักขระตัวอักษร Unicode ขีดกลางและจุด (จุดจบ) ซึ่งหมายความว่า ชื่อต่างๆ เช่น Françoise หรือ Jörg ไม่จัดว่า "ไม่ถูกต้อง" ซึ่งจะไม่เป็นแบบนั้นหากคุณใช้ค่า \w ซึ่ง [อนุญาตเฉพาะอักขระจาก ตัวอักษรละติน

  • required หมายความว่า... จำเป็น เบราว์เซอร์ไม่อนุญาตให้ส่งแบบฟอร์มโดยไม่มีข้อมูลสำหรับ ฟิลด์นี้ และจะเตือนและไฮไลต์ข้อมูลที่ป้อนเมื่อคุณพยายามส่งข้อมูล ไม่มีรหัสเพิ่มเติม ต้องระบุ

หากต้องการทดสอบวิธีการทำงานของแบบฟอร์มเมื่อมีและไม่มีแอตทริบิวต์เหล่านี้ ให้ลองป้อนข้อมูลดังนี้

  • ลองป้อนค่าที่ไม่เข้ากับแอตทริบิวต์ pattern
  • ลองส่งแบบฟอร์มที่ไม่มีข้อมูล คุณจะเห็นคำเตือนเกี่ยวกับฟังก์ชันของเบราว์เซอร์ในตัวสำหรับ ไม่มีข้อมูลในฟิลด์ที่จำเป็น และการตั้งค่าโฟกัส

ขั้นตอนที่ 3: เพิ่มช่องที่อยู่ที่ยืดหยุ่นในแบบฟอร์ม

หากต้องการเพิ่มช่องที่อยู่ ให้เพิ่มรหัสต่อไปนี้ในแบบฟอร์ม

<section>
  <label for="address">Address</label>
  <textarea id="address" name="address" autocomplete="address"
    maxlength="300" required></textarea>
</section>

textarea เป็นวิธีที่ยืดหยุ่นที่สุดสำหรับผู้ใช้ในการป้อนที่อยู่ และเหมาะสำหรับ ทั้งการตัดและวาง

คุณควรหลีกเลี่ยงการแยกแบบฟอร์มที่อยู่ออกเป็นส่วนประกอบต่างๆ เช่น ชื่อและหมายเลขถนน ที่จำเป็นจริงๆ อย่าบังคับให้ผู้ใช้พยายามใส่ที่อยู่ลงในช่องที่ไม่สมเหตุสมผล

จากนั้นเพิ่มช่องสำหรับรหัสไปรษณีย์และประเทศหรือภูมิภาค เพื่อให้เข้าใจได้ง่าย เฉพาะ 5 ประเทศแรกเท่านั้นที่รวมอยู่ที่นี่ รายการทั้งหมดจะรวมอยู่ในแบบฟอร์มที่อยู่ที่ครบถ้วน

<section>
  <label for="postal-code">ZIP or postal code (optional)</label>
  <input id="postal-code" name="postal-code"
    autocomplete="postal-code" maxlength="20">
</section>

<section id="country-region">
  <label for="">Country or region</label>
  <select id="country" name="country" autocomplete="country"
    required>
      <option selected value="SPACER"> </option>
      <option value="AF">Afghanistan</option>
      <option value="AX">Åland Islands</option>
      <option value="AL">Albania</option>
      <option value="DZ">Algeria</option>
      <option value="AS">American Samoa</option>
  </select>
</section>

คุณจะเห็นว่ารหัสไปรษณีย์เป็นตัวเลือกที่ไม่บังคับเนื่องจากมีหลายประเทศที่ไม่ได้ใช้รหัสไปรษณีย์ (หนังสือแหล่งที่มาทั่วโลกมีข้อมูลเกี่ยวกับ รูปแบบที่อยู่สำหรับ 194 ประเทศ รวมถึงที่อยู่ตัวอย่าง) ป้ายกำกับประเทศหรือ ภูมิภาค [region] ใช้แทนประเทศ (Country) เนื่องจากตัวเลือกบางอย่างจากรายการทั้งหมด (เช่น สหราชอาณาจักร) ไม่ใช่ประเทศเดียว (แม้ว่าจะมีค่า autocomplete)

ขั้นตอนที่ 4: ช่วยให้ลูกค้าป้อนที่อยู่การจัดส่งและที่อยู่สำหรับการเรียกเก็บเงินได้อย่างง่ายดาย

คุณได้สร้างแบบฟอร์มที่อยู่ที่ใช้งานได้ดีแล้ว แต่หากเว็บไซต์ของคุณต้องใช้มากกว่า 1 รายการ ที่อยู่สำหรับจัดส่งและเรียกเก็บเงิน เช่น ลองอัปเดตแบบฟอร์มเพื่อให้ลูกค้าป้อน ที่อยู่สำหรับจัดส่งและเรียกเก็บเงิน คุณจะทำให้การป้อนข้อมูลรวดเร็วและง่ายดายที่สุดได้อย่างไร โดยเฉพาะกรณีที่ทั้ง 2 ที่อยู่เหมือนกัน บทความที่มาพร้อมกับ Codelab นี้จะอธิบายถึง เทคนิคการจัดการที่อยู่หลายรายการ ไม่ว่าคุณจะทำอะไร โปรดตรวจสอบว่าได้ใช้ค่า autocomplete ที่ถูกต้อง

ขั้นตอนที่ 5: เพิ่มช่องหมายเลขโทรศัพท์

หากต้องการเพิ่มอินพุตหมายเลขโทรศัพท์ ให้เพิ่มรหัสต่อไปนี้ลงในแบบฟอร์ม:

<section>
  <label for="tel">Telephone</label>
  <input id="tel" name="tel" autocomplete="tel" type="tel"
    maxlength="30" pattern="[\d \-\+]+" enterkeyhint="done"
    required>
</section>

สำหรับหมายเลขโทรศัพท์ ให้ใช้อินพุตทางเดียว โปรดอย่าแบ่งหมายเลขออกเป็นส่วนๆ ซึ่งช่วยให้ ให้ผู้ใช้ป้อนข้อมูลหรือคัดลอกและวาง ทำให้การตรวจสอบง่ายขึ้น และช่วยให้เบราว์เซอร์ป้อนข้อความอัตโนมัติได้

แอตทริบิวต์ 2 อย่างที่ช่วยปรับปรุงประสบการณ์ของผู้ใช้ในการป้อนหมายเลขโทรศัพท์ได้มีดังนี้

  • type="tel" ช่วยให้ผู้ใช้อุปกรณ์เคลื่อนที่มีแป้นพิมพ์ที่ถูกต้อง
  • enterkeyhint="done" ตั้งค่าป้ายกำกับแป้น Enter สำหรับแป้นพิมพ์ในอุปกรณ์เคลื่อนที่เพื่อแสดงว่าเป็นคำสั่งสุดท้าย และส่งแบบฟอร์มได้แล้ว (ค่าเริ่มต้นคือ next)
ภาพหน้าจอ 2 ภาพของแบบฟอร์มบน Android แสดงให้เห็นว่าแอตทริบิวต์อินพุต Enterkeyhint เปลี่ยนแปลงไอคอนปุ่ม Enter อย่างไร
ใช้แอตทริบิวต์ Enterkeyhint เพื่อตั้งค่าป้ายกำกับปุ่ม Enter "ถัดไป" และ "เสร็จสิ้น"

แบบฟอร์มที่อยู่ที่สมบูรณ์ของคุณควรมีลักษณะดังนี้

  • ลองใช้แบบฟอร์มในอุปกรณ์เครื่องอื่น คุณกำลังกำหนดเป้าหมายเป็นอุปกรณ์และเบราว์เซอร์ใด คุณจะ ปรับปรุงฟอร์มให้ดีขึ้นได้ไหม

การทดสอบแบบฟอร์มของคุณบนอุปกรณ์ต่างๆ มีหลายวิธีดังนี้

ก้าวต่อไป

  • Analytics และการตรวจสอบผู้ใช้จริง: ช่วยให้สามารถทดสอบและตรวจสอบผู้ใช้จริงด้านประสิทธิภาพและความสามารถในการใช้งานของการออกแบบแบบฟอร์มได้ และดูว่าการเปลี่ยนแปลงสำเร็จหรือไม่ คุณควรตรวจสอบประสิทธิภาพการโหลดและ Web Vitals อื่นๆ รวมถึงการวิเคราะห์หน้าเว็บ (สัดส่วนของผู้ใช้ที่ตีกลับจากแบบฟอร์มที่อยู่ของคุณโดยไม่ดำเนินการให้เสร็จสมบูรณ์ ใช่ไหม ผู้ใช้ใช้เวลาเท่าไรในหน้าแบบฟอร์มที่อยู่) และการวิเคราะห์การโต้ตอบ (หน้าใด ที่ผู้ใช้โต้ตอบด้วยหรือไม่)

  • ผู้ใช้ของคุณอยู่ที่ใด พวกเขาจัดรูปแบบที่อยู่อย่างไร พวกเขาใช้ชื่ออะไรสำหรับที่อยู่ เช่น รหัสไปรษณีย์ คู่มือเชิงบังคับเกี่ยวกับที่อยู่ไปรษณีย์ของ Frank มีลิงก์ที่มีประโยชน์และคำแนะนำที่ครอบคลุมซึ่งให้รายละเอียดเกี่ยวกับรูปแบบที่อยู่ในกว่า 200 ประเทศ

  • ตัวเลือกประเทศเป็นที่รู้จักกันดีว่ามีความสามารถในการใช้งานต่ำ วิธีที่ดีที่สุดคือการหลีกเลี่ยงองค์ประกอบบางรายการสำหรับรายการจำนวนมาก และมาตรฐานรหัสประเทศ ISO 3166 ขณะนี้ระบุถึง 249 ประเทศ แทนที่จะใช้ <select> คุณอาจต้องการพิจารณาใช้ทางเลือกอื่น เช่น ตัวเลือกประเทศของ Baymard Institute

    คุณออกแบบตัวเลือกที่ดีกว่าสำหรับรายการที่มีจำนวนมากได้ไหม คุณจะมั่นใจได้อย่างไรว่าการออกแบบของคุณ เข้าถึงจากอุปกรณ์และแพลตฟอร์มต่างๆ ได้หรือไม่ (องค์ประกอบ <select> ทำงานกับ สิ่งของจำนวนมาก แต่อย่างน้อยก็ใช้งานได้บนเบราว์เซอร์และอุปกรณ์อำนวยความสะดวกเกือบทั้งหมด!)

    บล็อกโพสต์ <input type="country" /> พูดถึง ความซับซ้อนของการกำหนดตัวเลือกประเทศเป็นมาตรฐาน การแปลชื่อประเทศยังสามารถ เป็นปัญหา รายชื่อประเทศมีเครื่องมือสำหรับ การดาวน์โหลดรหัสประเทศและชื่อในหลายภาษาในหลายรูปแบบ