Vue.js實現(xiàn)在下拉列表區(qū)域外點擊即可關閉下拉列表的功能(自定義下拉列表)
在開發(fā)過程中,為了效果好看,往往需要自己開發(fā)一個下拉列表,而不是使用 HTML 自身的 select 下拉列表。然而當編寫自定義下拉列表的時候,就會碰到一個問題:如果用戶在下拉列表的范圍外進行鼠標點擊的操作,如何關閉已經(jīng)打開的下拉列表?
解決思路如下:在 DOM 的根節(jié)點上添加一個 click 事件,同時下拉列表內(nèi)阻止事件的默認行為和冒泡。當響應這個點擊事件的時候,說明是在下拉列表范圍外的點擊(因為下拉列表內(nèi)阻止了事件的冒泡),就可以關閉已經(jīng)打開的下拉列表。
如果是純 JS 代碼,有人可能會使用 document.onclick
來添加根節(jié)點事件。不過,我現(xiàn)在使用 Vue.js,會選擇使用 Vue.js 的方式處理這個問題。
Vue.js 使用組件化的方式組織代碼,會有一個根組件,可以在這個根組件上加上 @click 事件,來響應區(qū)域外的點擊事件。在一個完整的應用中,可能有多種場景需要這種區(qū)域外點擊關閉的功能。除了最普通的表單里的下拉列表外,還可能是網(wǎng)站右上角的消息提示框,或者菜單。比較合適的做法是把點擊事件的具體處理邏輯放到各個組件中去。
那么如何讓各個子組件響應根組件上的點擊事件呢?可以使用Vuex來做到這一點。在這里 Vuex 起到了組件之間互相傳遞信息的作用。
讀者可以在這個網(wǎng)址下載我編寫的 Demo 項目:
推薦讀者使用 yarn install
安裝所需的依賴。
下面說一下關鍵代碼:
程序入口 main.js:
import Vue from 'vue' import App from './App.vue' import VueRouter from 'vue-router' import routes from './router' import VueSuperagent from 'vue-superagent' import Vuex from 'vuex' import 'babel-polyfill'; import store from './vuex/store'; Vue.use(VueRouter); Vue.use(VueSuperagent); Vue.use(Vuex); const router = new VueRouter({ mode: 'history', routes }) new Vue({ el: '#app', router, store, render: h => h(App) })
根節(jié)點 App.vue,添加了點擊事件。
<template> <div @click="clickRoot"> <router-view></router-view> </div> </template> <script> export default { methods:{ clickRoot(event){ this.$store.dispatch("clickRootNumAction", 1); } } } </script>
以上所述是小編給大家介紹的Vue.js實現(xiàn)在下拉列表區(qū)域外點擊即可關閉下拉列表的功能(自定義下拉列表),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
- jQuery+vue.js實現(xiàn)的九宮格拼圖游戲完整實例【附源碼下載】
- 詳解使用Vue.Js結合Jquery Ajax加載數(shù)據(jù)的兩種方式
- Vue.js 通過jQuery ajax獲取數(shù)據(jù)實現(xiàn)更新后重新渲染頁面的方法
- vue.js2.0點擊獲取自己的屬性和jquery方法
- Vue.js列表渲染綁定jQuery插件的正確姿勢
- Vue.js表單標簽中的單選按鈕、復選按鈕和下拉列表的取值問題
- vue表單綁定實現(xiàn)多選框和下拉列表的實例
- vue下拉列表功能實例代碼
- Vue.js做select下拉列表的實例(ul-li標簽仿select標簽)
- vue 1.x 交互實現(xiàn)仿百度下拉列表示例
- jQuery+vue.js實現(xiàn)的多選下拉列表功能示例
相關文章
在vue中獲取wangeditor的html和text的操作
這篇文章主要介紹了在vue中獲取wangeditor的html和text的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10Electron+vite+vuetify項目搭建的流程和方法
最近想用Electron來進行跨平臺的桌面應用開發(fā),同時想用vuetify作為組件,于是想搭建一個這樣的開發(fā)環(huán)境,這里分享下Electron+vite+vuetify項目搭建的流程和方法,感興趣的朋友一起看看吧2024-06-06vue使用keep-alive實現(xiàn)數(shù)據(jù)緩存不刷新
這篇文章主要介紹了vue使用keep-alive實現(xiàn)數(shù)據(jù)緩存不刷新,這里整理了詳細的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10