一篇文章教你實現VUE多個DIV,button綁定回車事件
目前有個需求是這樣的,點擊確定按鈕或鍵盤回車時執行操作,很多地方都需要用到。
試瞭幾種方法均不行,
首先,我在div(button也一樣)上 綁定@keyup.enter方法,完全沒效果,然後按照網上的方法,這樣寫:
<div class="btn submit" @keyup.enter="submit" @click="submit">確定(Ent)</div>
created(){ document.onkeydown = function(e) { if(e.keyCode == 13){ console.log("調用需要執行的方法"); } } },
這樣確實可以實現回車事件,但是這是全局的,也就是說,你在其他組件回車時也會調用此處的回車事件,此方法不行。
然後我是這樣做的:
1.在確定按鈕和取消按鈕中間添加個<input>標簽(放在中間可以當按鈕的間隔,就不用寫margin-left瞭),然後給這個input標簽加上@keyup.enter事件;
<template slot="footer"> <div class="dialog-footer dis-flex"> <div class="btn cancel" @click="showDialog = false">取消(Esc)</div> <input type="text" ref="inputdata" class="hiddenIpt" @keyup.enter="submit" /> <div class="btn submit" @click="submit"> 確定(Ent) </div> </div> </template>
2.寫個監聽器,監聽到彈窗打開時,給input框自動聚焦( inputdata 是 input 上用 ref 綁定的)。
watch: { showDialog() { if (this.showDialog) { //this.$refs.inputdata.focus(); 錯誤寫法 this.$nextTick(() => {//正確寫法 this.$refs.inputdata.focus(); }); } }, },
3.隱藏input框(設置寬度用來當確定按鈕和取消按鈕之間的間隔。)
.hiddenIpt { width: 2rem; opacity: 0; }
就這樣完美解決,有更好的辦法,歡迎溝通交流。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!