当字段处于焦点时,VueJS 会触发一个事件

Posted

技术标签:

【中文标题】当字段处于焦点时,VueJS 会触发一个事件【英文标题】:VueJS trigger an event when a field is in focus 【发布时间】:2019-02-08 08:23:09 【问题描述】:

我有一个 VueJS 的密码更改页面,我只想在用户单击新密码字段时查看密码策略。 问题是我找不到页面是否在焦点上..

<b-row>
  <b-col>
    <b-form-group id="newPasswrd" label="New Password" :state="statePassword">
      <b-input-group>
        <b-form-input id="newPassword" v-model="passwords.newPassword" ref="newPassword" placeholder="Passwort" type="password" maxlength="60" />
        <p class="password-description"  >Must be at least 8 characters and contain at least two of the following: Upper case, Lower case, special characters or numbers</p>            
      </b-input-group>
    </b-form-group>
  </b-col>
</b-row>

这就是我在页面脚本部分中用于测试的内容:

      if (this.$refs.newPassword.focus() == true) console.log("focus");

我的计划是最终将此行放入计算中并为其附加一个布尔值以查看/隐藏字段下方的文本,具体取决于它是否处于焦点。 发生的情况是,当我触发写入此条件的方法时,我在控制台中什么也得不到,但是焦点却转到了字段上,这不是我想要的。 如果该字段处于焦点位置,我应该怎么做才能获得布尔值?

【问题讨论】:

onfocus 活动怎么样? w3schools.com/jsref/event_onfocus.asp 试试v-on:focus 【参考方案1】:

您可以创建自定义指令

Sample from official vuejs docs

Vue.directive('focus', 
  // When the bound element is inserted into the DOM...
  inserted: function (el) 
    // Focus the element
    el.focus()
  
)

【讨论】:

问题是检测焦点不是设置它。 这只是创建指令的示例,您可以随意更改它 这是一个很好的第一步,但仍然不能解决问题;)【参考方案2】:

你试过只用 css 吗?

如果您不必支持 IE11/Edge:

b-input-group:focus-within>p 
    display: block;

如果你必须支持 IE11/Edge:

input:focus + p 
    display: block;

我还建议添加类而不是准系统元素。

【讨论】:

【参考方案3】:

使用v-onnative 修饰符进行绑定:

v-on:focus.native="onFocus"

From a Core Member

Binding Native Events to Components

【讨论】:

以上是关于当字段处于焦点时,VueJS 会触发一个事件的主要内容,如果未能解决你的问题,请参考以下文章

Vuejs:当特定选项卡处于活动状态时是不是会发出事件(bootstrap-vue)

在焦点侦听器中更改复合可绘制时,EditText会无限地触发焦点更改事件

js实现点击显示一个div,点击其他任何地方div消失,如何实现

当应用程序失去焦点时,Windows 窗体组合框会触发 SelectionChangeCommitted、SelectedValueChanged 和 SelectedIndexChanged 事件

如果当焦点处于其他应用程序时,如何拦截键盘事件?

Nuxt / Vuejs当页面完成呈现所有组件时将触发的事件