ฉันกำลังพยายามรับข้อความในกล่องข้อความตามที่ผู้ใช้พิมพ์ ( jsfiddle playground ):
function edValueKeyPress() {
var edValue = document.getElementById("edValue");
var s = edValue.value;
var lblValue = document.getElementById("lblValue");
lblValue.innerText = "The text box contains: " + s;
//var s = $("#edValue").val();
//$("#lblValue").text(s);
}
<input id="edValue" type="text" onKeyPress="edValueKeyPress()"><br>
<span id="lblValue">The text box contains: </span>
รหัสทำงานโดยไม่มีข้อผิดพลาดยกเว้นว่าค่าของinput text
กล่องระหว่างonKeyPress
จะเป็นค่าก่อนการเปลี่ยนแปลงเสมอ:
คำถาม : ฉันจะรับข้อความของกล่องข้อความได้
onKeyPress
อย่างไร?
โบนัสแช็ต
มีสามเหตุการณ์ที่เกี่ยวข้องกับ"ผู้ใช้กำลังพิมพ์"ใน HTML DOM:
onKeyDown
onKeyPress
onKeyUp
ในWindowsลำดับของWM_Key
ข้อความจะมีความสำคัญเมื่อผู้ใช้กดคีย์ค้างไว้และคีย์จะเริ่มซ้ำ:
WM_KEYDOWN('a')
- ผู้ใช้มีการผลักดันให้ลงAที่สำคัญWM_CHAR('a')
-a
ได้รับตัวละครจากผู้ใช้WM_CHAR('a')
-a
ได้รับตัวละครจากผู้ใช้WM_CHAR('a')
-a
ได้รับตัวละครจากผู้ใช้WM_CHAR('a')
-a
ได้รับตัวละครจากผู้ใช้WM_CHAR('a')
-a
ได้รับตัวละครจากผู้ใช้WM_KEYUP('a')
- ผู้ใช้ปล่อยAคีย์
จะส่งผลให้อักขระห้าตัวปรากฏในตัวควบคุมข้อความ: aaaaa
ประเด็นสำคัญคือคุณตอบสนองต่อWM_CHAR
ข้อความที่เกิดขึ้นซ้ำ ๆ มิฉะนั้นคุณจะพลาดเหตุการณ์เมื่อกดปุ่ม
ในHTMLสิ่งที่แตกต่างกันเล็กน้อย:
onKeyDown
onKeyPress
onKeyDown
onKeyPress
onKeyDown
onKeyPress
onKeyDown
onKeyPress
onKeyDown
onKeyPress
onKeyUp
html มอบKeyDown
และKeyPress
ทุกซ้ำที่สำคัญ และKeyUp
เหตุการณ์จะเพิ่มขึ้นเมื่อผู้ใช้ปล่อยคีย์เท่านั้น
นำไป
- ฉันสามารถตอบสนอง
onKeyDown
หรือonKeyPress
แต่ทั้งสองยังคงถูกยกขึ้นก่อนที่จะinput.value
มีการอัปเดต - ฉันไม่สามารถตอบสนองได้
onKeyUp
เพราะมันไม่เกิดขึ้นเมื่อข้อความในกล่องข้อความเปลี่ยนไป
คำถาม:ฉันจะรับข้อความของกล่องข้อความได้onKeyPress
อย่างไร?