โต้ตอบกับผู้ใช้งานด้วย input
ในตอนนี้ เราจะมารู้จักกับ HTML element ตัวใหม่คือ
<input>
กันครับเวลาใช้ element
<input>
จะมี attribute ตัวหนึ่งที่สำคัญคือtype="…"
ซึ่งเป็นตัวกำหนดว่าจะแสดงเป็น UI component แบบไหนUI (User Interface)
“User interface” หรือ “ส่วนต่อประสานกับผู้ใช้” หมายถึงสิ่งที่ผู้ใช้งานสามารถกระทำกับแอปพลิเคชันของเรา เพื่อให้แอปพลิเคชันทำงานตามที่ผู้ใช้งานต้องการ UI สามารถสร้างขึ้นโดยนำ “UI components” ต่างๆ (เช่น ปุ่มกด กล่องข้อความ หรือเมนู) มาประกอบเข้าด้วยกัน
ถ้าตั้ง
type="button"
ก็จะได้ปุ่มกด โดยกำหนดข้อความที่จะแสดงบนปุ่มได้โดยตั้งค่า attributevalue="…"
:html<input type="button" value="Click me">
ถ้าตั้ง
type="text"
ก็จะได้กล่องข้อความhtml<input type="text">
ถ้าอยากรู้ว่า element
input
มีชนิดอะไรอีกบ้าง ลองเข้าไปดูได้บนเว็บ MDN
ใช้งาน JavaScript กับ input
เดี๋ยวเราจะลองใช้ JavaScript กับ input กัน เริ่มจากการสร้างปุ่มขึ้นมา
html<input type="button" value="Click me">
ก่อนอื่นเราต้องทำให้โค้ด JavaScript หาตัว input เจอก่อน เริ่มจากการใส่ attribute
id=""
ให้กับ input ก่อนhtml<input id="my-button" type="button" value="Click me">
แล้วเราก็สามารถใช้คำสั่ง
document.getElementById
ใน JavaScript เพื่อให้เบราว์เซอร์ทำการค้นหา element บนหน้าเว็บ[1] ที่มีid="my-button"
เดี๋ยวเราจะลองทำใน JavaScript Console ดูก่อนครับ
let myButton = document.getElementById('my-button')
undefined
คำสั่งข้างบนจะหา element ที่มี
id="my-button"
แล้วเก็บไว้ในตัวแปรชื่อmyButton
การดึง element บนหน้าเว็บมาเก็บไว้ในตัวแปร
let ชื่อตัวแปร = document.getElementById('id')
หลังจากนั้นเราสามารถเช็คค่าของตัวแปร
myButton
ได้ โดยการพิมพ์ชื่อตัวแปรนั้นใน JavaScript ConsolemyButton
<input id="my-button" type="button" value="Click me">
ทำให้โค้ดทำงานเมื่อปุ่มถูกกด
เราทำให้เวลาคลิกแล้วขึ้นป๊อปอัพขึ้นมา โดยการกำหนดฟังก์ชัน
onclick
บนตัวปุ่ม (โค้ดหน้าตาแปลกๆ มาอีกแล้ว… เดี๋ยวจะอธิบายในบทต่อๆ ไปครับ)myButton.onclick = () => { alert('hi') }
undefined
เมื่อคลิกที่ปุ่ม ก็จะมีหน้าต่าง alert ป๊อปอัพขึ้นมา
การรันโค้ดเมื่อปุ่มถูกคลิก
ชื่อตัวแปร.onclick = () => {โค้ดที่ต้องการให้ทำงาน}
การแสดงข้อความในกล่องป๊อปอัพ
alert(expression)
โค้ดที่พิมพ์ใน console จะมีผลแค่เท่าที่เปิดหน้าเว็บนั้นอยู่เท่านั้น พอกด refresh แล้วกดปุ่มใหม่ ก็จะไม่มีป๊อปอัพขึ้นมาอีก เพราะหน้าเว็บถูกโหลดใหม่แล้ว
เมื่อเรามีโค้ดที่ใช้งานได้แล้ว ก็เอามาใส่ใน
<script>
เพื่อให้โค้ดทำงานเมื่อเราเปิดหน้าเว็บครั้งต่อไปhtml<input id="my-button" type="button" value="Click me"> <script> let myButton = document.getElementById('my-button') myButton.onclick = () => { alert('hi') } </script>
เอา
<script>
ไว้หลังตัว<input>
เพื่อให้โปรแกรมทำงานได้อย่างถูกต้อง เราต้องเอา element script ไว้หลังตัว input เพราะถ้าเอาไว้ก่อน จะทำให้โค้ดที่อยู่ข้างใน script ถูกทำงาน ก่อนที่ตัว input จะถูกสร้างขึ้นมาบนหน้าเว็บ และส่งผลให้คำสั่ง
document.getElementById
หาตัว input ตัวนั้นไม่เจอ (เพราะ ณ จังหวะนั้น ตัว input ยังไม่มีอยู่)
อ่านหรือแก้ข้อความในกล่องข้อความ
สมมติว่าเรามีกล่องข้อความ…
html<input type="text" id="your-name">
และเราเอากล่องนี้มาเก็บในตัวแปร
yourName
:html<input type="text" id="your-name"> <script> let yourName = document.getElementById('your-name') </script>
เราสามารถอ่านข้อความโดยดึงค่า
value
ออกมาได้ โดยการพิมพ์ใน console:yourName.value
""
โดยจะได้ผลลัพธ์เป็นข้อความที่เราพิมพ์ลงไปในกล่องข้อความ หากกล่องข้อความยังว่างอยู่ ก็จะได้ผลลัพธ์เป็นสตริงเปล่า หรือ
""
(empty string)ทดลองเล่นด้วยตัวเอง
- คลิกที่นี่เพื่อเปิดหน้าตัวอย่าง
- เปิด JavaScript Console ขึ้นมา
- พิมพ์
yourName.value
ลงไปใน console → ควรจะได้ผลลัพธ์เป็นสตริงเปล่า - ใส่ข้อความอะไรสักอย่างลงไปในกล่องข้อความ
- พิมพ์
yourName.value
ลงไปใน console อีกครั้ง → ควรจะได้ผลลัพธ์เป็นข้อความที่เราพิมพ์ลงไปในกล่องข้อความ
การอ่านข้อความในกล่อง input
ชื่อตัวแปร.value
นอกจากอ่านข้อความออกมาแล้ว เราสามารถเขียนข้อความเข้าไปในกล่องได้ด้วย:
jsyourName.value = 'Brendan'
การแก้ข้อความในกล่อง input
ชื่อตัวแปร.value = expression ข้อความที่จะใส่ในกล่องข้อความ
Putting it together
ลองเอาความรู้ทั้งหมดจากตอนนี้มารวมกันดู ก็สามารถสร้างโปรแกรมที่ถามชื่อ แล้วพอกดทักทาย โปรแกรมก็จะแสดงข้อความทักทายกลับมาได้
<!doctype html>
<html>
<head><title>Greeter</title></head>
<body>
Your name: <input id="your-name" type="text">
<input type="button" value="Say hi!" id="my-button">
<script>
let myButton = document.getElementById('my-button')
let yourName = document.getElementById('your-name')
myButton.onclick = () => {
alert('Hi ' + yourName.value + '!')
}
</script>
</body>
</html>