這招還不錯。
簡述
在遇到表單的時候會希望除了「按下按鈕」以外還能支援「按下 Enter 鍵」。
但麻煩的地方在於一個必須綁 click
事件,一個必須綁 keypress
事件,並且要判斷使用者按下的是 Enter 才做處理,所以你可能會這樣寫:
1 2 3 4
| <div> <input type="text"> <button>send</button> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| document .querySelector('[type=text]') .addEventListener('keydown', handlerEnter)
document .querySelector('button') .addEventListener('click', handlerClick)
function handlerClick() { console.log('button click!') }
function handlerEnter(e) { if (e.key === 'Enter') { console.log('press enter!') } }
|
但通常兩個要做的事情都是一樣的,只差在 keypress
要判斷是不是 Enter
的流程,導致這兩個 function 沒辦法寫在一起,這很讓人傷腦筋。
讓你的腦袋轉個方向
沒錯,可以轉個方向來思考,為什麼不讓「按下 enter 時自動執行 click 這個動作」就好?
所以其實能改成這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| document .querySelector('[type=text]') .addEventListener('keydown', (e) => { if (e.key === 'Enter') { document.querySelector('button').click() } })
document .querySelector('button') .addEventListener('click', handler)
function handler() { console.log('click!') }
|