防止事件更改选项卡

Posted

技术标签:

【中文标题】防止事件更改选项卡【英文标题】:prevent event change Tab 【发布时间】:2020-01-21 16:25:15 【问题描述】:

在 BootstrapVue 选项卡中,当我们单击一个选项卡以更改为另一个选项卡 => 事件单击将触发。事件单击触发后,我需要进行一些验证。然后,如果失败,我将取消该事件并阻止选项卡更改。但是我在 BootstrapVue 文档中找不到任何方法来做到这一点。我需要你的帮助!!

<b-tabs pills content-class="mt-3" v-model="tabIndex" >
   <b-tab title="Profile" active @click="onChange" id="test" title-item-class="btnTab"> 
       <information @changeTab="changeTabInformation" ></information>
   </b-tab>
   <b-tab title="Preferences" @click="onChange"  title-item-class="btnTab">
       <preference  @changeTab="changeTabPreference" ></preference>
   </b-tab>
</b-tabs>

(希望你能理解我,因为我的英文写作能力很差:()

【问题讨论】:

@click="onChange" 更改为@click.stop="onChange" 会阻止标签更改吗? 【参考方案1】:

你做这样的事情。使用activate-tab事件...

<b-tabs card v-on:activate-tab="tabActivated">
      <b-tab> ...</b-tab>
      <b-tab> ...</b-tab>
</b-tabs>

然后在

methods:    
  tabActivated(newTabIndex,oldTabIndex, event)
    if(youValidationFailed)
      event.preventDefault();
   
,

【讨论】:

【参考方案2】:

很遗憾,这是不可能的。在满足使用计算值转到选项卡的所有要求之前,您不能通过禁用选项卡来解决您的问题吗?

<div id='app'>
  <div>
  <b-card no-body>
    <b-tabs card>
      <b-tab title="Tab 1">
        <b-btn @click="counter++">increase</b-btn>
      </b-tab>
      <b-tab title="Tab 2" :disabled="status" >
        <b-card-text>Tab Contents 2</b-card-text>
      </b-tab>
    </b-tabs>
  </b-card>
     counter
</div>
</div>

JS:

new Vue(
  el: "#app",
  data: 
    counter: 0,
  ,
  computed: 
    status: function() 
      return this.counter < 2
    
  
);

【讨论】:

是的,禁用其他 b-tab 是最好的选择,并在满足前一个标签内容(即子表单)中的某些条件时启用它们。对于仅使用键盘的用户或屏幕阅读器用户来说,这会更直观……因为他们不知道为什么单击链接(标签按钮)不起作用。

以上是关于防止事件更改选项卡的主要内容,如果未能解决你的问题,请参考以下文章

防止自定义 UITabBarController 更改选项卡

通过鼠标单击选项卡来捕获选项卡更改事件

防止JavaFX TabPane在滑动时切换选项卡

更改选项卡时避免/防止片段刷新

在点击事件上更改选定的选项卡

当用户在浏览器选项卡中手动更改 url 时,防止在 React 中路由