【问题标题】:Text input's "value" attribute is incorrect文本输入的“值”属性不正确
【发布时间】:2018-12-24 17:24:58
【问题描述】:

我的 Vue 应用程序中只有一个输入。它是组件的一部分,其设置类似于“v-model with components”的使用documentation

Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input
      v-bind:value="value"
      v-on:input="$emit('input', $event.target.value)"
    >
  `
})

当页面加载时,这个输入显然填充了一个值(来自 Chrome 自动填充),但在我的代码中,我有以下语句:

setInterval(() => { console.log(document.querySelector('input').value); }, 50);

这个始终记录一个空字符串,即使我可以清楚地看到该输入填充了一个值。但是,一旦我在 Chrome devtools 中检查或引用该元素,setInterval 就会突然开始记录正确的值 (luke@deentaylor.com):

由于一旦尝试调试问题就会消失,因此诊断非常困难。是什么原因造成的?

编辑:没关系,这种行为与元素本身的检查无关,控制台中的console.log('hi') 会产生相同的结果。填写正确的表单值的前提是用户与页面交互。与解决方案here 不同,我确实需要完整的自动填充值;在启用“提交”按钮之前,我的登录表单需要使用该字段的内容向服务器发出请求。

【问题讨论】:

  • 你把setIntervale...放在哪里?
  • This article 可能有用。
  • @BoussadjraBrahim setInterval 在哪里无关紧要,它引用全局变量来查找输入并且setInterval 工作正常。不过,它是在我的一个组件的mounted 挂钩中调用的。
  • @RoyJ 谢谢。有一种检测输入自动填充的方法很有用,但仍然不能让我看到字段的值。
  • 可能在页面中生成click 事件将使字段知道它们的自动填充值。

标签: javascript forms vue.js autofill


【解决方案1】:

我相信这只是 Chrome 自动填充的预期行为。请参阅this 问题。

【讨论】:

  • 这令人失望;我的应用需要在启用“提交”按钮之前使用输入内容发出服务器请求,如果在用户交互之前无法获取自动填充凭据的内容,我可能需要简单地禁用自动填充:/跨度>
  • 我会稍等片刻接受您的回答,以防万一其他人提出解决方案
  • 我不怪你,我希望有人这样做。
  • 链接问题答案中的假设是正确的。这是一种阻止恶意页面使用隐藏输入窃取自动填充信息的安全措施
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
相关资源
最近更新 更多