国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

利用JS響應式修改vue實現頁面的input值

2024-05-06 15:35:10
字體:
來源:轉載
供稿:網友

前言

大部分人在看到這篇文章的標題時第一時間可能有點懵,我先簡單介紹一下背景:

公司有一個基于Vue實現的登錄中心是我負責維護的,頁面上是一個常規的登錄界面,用戶名輸入框、密碼輸入框和登錄按鈕各一個

今天有個同事(之后簡稱A)過來找我問到這么一個問題:

他負責的應用將登錄中心集成到了APP端,他接到的需求是希望在APP端拉起登錄頁面時,自動將用戶帳號和密碼填入,然后自動點擊登錄。

開始正題

我們把登錄頁面簡化成以下代碼

<template> <div> <input name="username" type="text" v-model="account.username"> <input name="password" type="password" v-model="account.password"> <button class="login-button" @click="login">LOGIN</button> </div></template><script>export default { name: 'app', components: { }, data () { return {  account: {  username: '',  password: ''  } } }, methods: { login () {  $ajax({  method: 'POST',  url: '/api/login',  data: this.account  }) } }}</script>

APP端在拉起登錄頁面時,可以傳入js代碼并在當前頁面執行,拋開MVVM框架Vue的影響,在前端的遠古時代這其實是個很簡單的問題

const usernameInput = document.querySelector('input[name=username]')const passwordInput = document.querySelector('input[name=password]')const button = document.querySelector('.login-button')usernameInput.value = 'test@dji.com' // 修改用戶名輸入框的值passwordInput.value = 'xxxxxxxx' // 修改密碼輸入框的值button.click() // 觸發按鈕點擊事件

上面也正是同事A所嘗試的方法,然而他在實際測試中發現,運行js后,雖然頁面上的input框正確變更為修改后的值,但發起的ajax請求中 username 和 password 均為空字符串,于是將問題反饋到了我這邊

原理

其實如果對Vue的響應式數據原理有一定理解的話,就可以很快的想到這個問題的原因。問題的根源就在 v-model 的原理上:

v-model 其實是vue為了方便使用提供的一個語法糖,實際展開來是這樣子

<input name="username" type="text" :value="account.username" @input="account.username = $event.target.value">

當用戶在輸入框輸入時會觸發input事件,從而更新 account.username 值

而上一步中使用 document.querySelector('input[name=username]').value = 'test@dji.com' 模擬的輸入行為實際上并不能觸發 oninput 事件,那么模擬 button 的點擊事件后發起的 ajax 請求拿到的數據自然也就是未修改前的值(即空字符串)

解決方案

弄明白了問題的原理之后,解決方案自然也就很容易想到。既然js模擬輸入無法觸發 oninput 事件,那我們就再進一步,在修改完值后用js手動觸發 oninput 事件

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 鸡西市| 庆城县| 龙山县| 高碑店市| 万宁市| 朝阳区| 合肥市| 广东省| 神农架林区| 肃北| 萨迦县| 本溪| 岳阳市| 慈溪市| 波密县| 平泉县| 永丰县| 五家渠市| 石棉县| 甘洛县| 临沧市| 图木舒克市| 曲阜市| 昌江| 建昌县| 德化县| 宜川县| 杭锦后旗| 镇巴县| 堆龙德庆县| 平利县| 罗平县| 苏尼特右旗| 攀枝花市| 镇雄县| 天镇县| 梁山县| 蒙山县| 道真| 吕梁市| 建瓯市|