Vue項目中使用jquery的簡單方法
前言
在vue項目中,需要實現(xiàn)某些特定的功能時,使用mvvm模式不易實現(xiàn)。因此引入jquery包來完成需求
jquery中的觸發(fā)事件可以自己定義在mounted中,如果需要使用vue中data的數(shù)據(jù),直接使用this.msg是無法使用的,需要另外定義const _this = this,
存儲this.之后便可以在事件中使用_this.msg數(shù)據(jù)了。
需求:在品牌處可以輸入,并且會有模糊搜索的下拉框,也可下拉選擇,在輸入完畢后檢驗值是否在下拉框中存在,聚焦時藍色邊框,change時如果不存在則紅框顯示,存在的話就綠框提示,(就是帶輸入建議的輸入框)
問題: 使用element-ui中的el-autocomplete組件,開始通過失焦事件來驗證,但是如果選擇了下拉框某個值時(選中后會將下拉框的值賦給上面的輸入框),失焦事件觸發(fā)會在賦值之前,因此拿失焦時輸入框的值來進行判斷時錯誤的,在先改變輸入框的值后再去選擇下拉框,change事件有同樣的bug,沒辦法只能自己引入jquery來完成


點擊輸入框后,通過placeholder判斷是否是品牌下的的輸入框,因為每個輸入框都有這個類,如果是的話則增加一個類名,如果第一次點擊的位置和第二次鼠標點擊的位置都是品牌下的輸入框,則執(zhí)行相應(yīng)的邏輯判斷,
在邏輯執(zhí)行完后就刪除其他處同樣的類名inputList
const _this = this
$('body').delegate('.el-input__inner', 'focus', function(e) { // 因為是動態(tài)生成的,所以選擇這種方式來監(jiān)聽事件
if (e.target.placeholder === '請輸入品牌') { // 當聚焦在品牌輸入框時觸發(fā)
$(this).addClass('inputList') // 加上一個類名inputList
if ($('.inputList').length === 2) { // 判斷下一次點擊的位置,當從第一個輸入框改值后下一個聚焦位置還是品牌下的輸入框時
if (!$('.inputList').not(this).val()) {
$('.inputList').not(this).css('border', '1px solid #67c23a')
} else {
let num = 0
for (let j = 0; j < _this.goodsBrands.length; j++) {
if ($('.inputList').not(this).val() === _this.goodsBrands[j].value) {
num += 1
break
}
}
if (num === 0) {
_this.$message.error('輸入的品牌不在品牌列表中')
$('.inputList').not(this).css('border', '1px solid #F56C6C')
} else {
$('.inputList').not(this).css('border', '1px solid #67c23a')
}
}
}
$('.el-input__inner').not(this).removeClass('inputList') // 邏輯執(zhí)行完之后刪除當前聚焦位置以外的inputList類,這樣就保持.inputList長度最多為2
}
})
此處是為了模擬出輸入框的change事件,因為在聚焦時會添加inputList這個類名。所以這里可以判斷是否是自己想要的位置,如果是的話給一個標志位getindex,當點擊到品牌下的輸入框時,如果第二次的點擊位置不是品牌其他位置的輸入框,則進行邏輯判斷
$(document).click(function(e) { // focus觸發(fā)時也會觸發(fā)這個事件,并且觸發(fā)在focus事件之后
if (e.target.classList[1] === 'inputList') { // 判斷是否點擊在對應(yīng)位置
_this.getIndex = 1 // 用于標志在聚焦事件觸發(fā)后的下一次點擊是否同樣會觸發(fā)聚焦,如果是則把第二次點擊當成第一次重新判斷,等到下一次點擊再來判斷
} else {
if (_this.getIndex === 1) {
if (!$('.inputList').eq(0).val()) {
$('.inputList').eq(0).css('border', '1px solid #67c23a')
} else {
let num = 0
for (let j = 0; j < _this.goodsBrands.length; j++) {
if ($('.inputList').eq(0).val() === _this.goodsBrands[j].value) {
num += 1
break
}
}
if (num === 0) {
_this.$message.error('輸入的品牌不在品牌列表中')
$('.inputList').eq(0).css('border', '1px solid #F56C6C')
} else {
$('.inputList').eq(0).css('border', '1px solid #67c23a')
}
}
$('.el-input__inner').removeClass('inputList')
_this.getIndex = 0 // 每次第二次點擊了其他位置時,getIndex重新計數(shù)
}
}
})
小白一枚,如果有其他更好的方法,歡迎各位同行指教,多多交流
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
vue實現(xiàn)公共組件傳值并及時監(jiān)聽到數(shù)據(jù)更新視圖
這篇文章主要介紹了vue實現(xiàn)公共組件傳值并及時監(jiān)聽到數(shù)據(jù)更新視圖方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01
vue3如何解決各場景l(fā)oading過度(避免白屏尷尬!)
在開發(fā)的過程中點擊提交按鈕,或者是一些其它場景總會遇到loading加載,下面這篇文章主要給大家介紹了關(guān)于vue3如何解決各場景l(fā)oading過度的相關(guān)資料,避免白屏尷尬,需要的朋友可以參考下2023-03-03
Vue實現(xiàn)路由跳轉(zhuǎn)的3種方式超詳細分解
Vue.js是一款流行的前端JavaScript框架,它提供了多種方式來實現(xiàn)路由跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于Vue實現(xiàn)路由跳轉(zhuǎn)的3種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-12-12

