classListのadd,removeの結果が想定通りにならない
仕様
- ある条件で、選択したタブ切り替えをキャンセルしたい
仕様技術(※今回の相談は素のjavascript操作ですが他に方針もあるかと思い一応記載・・・)
- Nuxt.js: 2.8.1
- Vue.js: 2.6.1
- ElemetUI: 2.10.1
実装方針
- ↑
ある条件
のとき、選択したタブに入っているis-active
クラスを削除し、現在のタブにis-active
クラスを追加する。 - (javascriptにて要素を取得しclassList.addやremoveを使いclass属性を追加・削除したい)
現状とソース
- 現状:タブ切り替えキャンセルしているつもりだが、タブが切り替わってしまう。
html
1<el-tabs 2 v-model="activeTab" 3 :before-leave="checkEdited" 4 @tab-click="handleTabClick" 5 > 6 <el-tab-pane 7 v-for="(item, index) in tabs" 8 :key="index" 9 :name="index.toString()" 10 :label="item.Name" 11 ></el-tab-pane> 12 </el-tabs>
javascript
1async handleTabClick(selectedTab) { 2 const editedItems = await this.getItemsEdited() 3 if (editedItems.length !== 0) { 4 // キャンセル処理 5 // 選択したタブ 6 const selectedTabId = 7 ProspectEgh.PROSPECTCONSTSTR.tabIdPrefix + selectedTab.index 8 const selectedtTabElement = document.getElementById(selectedTabId) 9 // 現在のタブ 10 const currentTabId = 11 ProspectEgh.PROSPECTCONSTSTR.tabIdPrefix + this.currentTabIndex 12 const currentTabElement = document.getElementById(currentTabId) 13 // 選択したタブ確認 14 console.log('selectedTabId') 15 console.log(selectedTabId) 16 console.log('selectedtTabElement') 17 console.log(selectedtTabElement.classList) 18 selectedtTabElement.classList.remove('is-active') 19 console.log('selectedtTabElement') 20 console.log(selectedtTabElement.classList) 21 22 // 現在のタブ確認 23 console.log('currentTabId') 24 console.log(currentTabId) 25 console.log('currentTabElement') 26 console.log(currentTabElement.classList) 27 currentTabElement.classList.add('is-active') 28 console.log('currentTabElement') 29 console.log(currentTabElement.classList) 30 } 31 }
確認したこと
- DevToolsの
Elements
でDOM操作(添付ソースの通りIDから要素取得しclass追加操作や削除操作)してみると思い通りに追加・削除できる
コンソール出力
ある条件
+ タブを選択したタイミングで選択したタブ(selectedTabElement)と現在のタブ(currentTabElement)をそれぞれclass操作前
・class操作後
でコンソール出力- 添付画像を見ると、選択したタブ(
selectedTabElement
)にはDOMTokenList
上はis-active
クラスはないが、value
欄を見るとis-active
がある。 - 直後に
classList.remove('is-active')
で削除操作をしても値は変わらず。。 - 同じように現在のタブ(
currentTabElement
)ではis-active
がDOMTokenList
上にはあるがvalue
欄ではない。操作後の値も変わらず。。
操作をするタイミングが悪いのかと思って調査中です。 ご指摘いただけると幸いです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/16 01:33