使用自动完成填充表单时,Javascript 不启用按钮

Posted

技术标签:

【中文标题】使用自动完成填充表单时,Javascript 不启用按钮【英文标题】:Javascript does not enable button when form is populated using autocomplete 【发布时间】:2016-12-13 16:58:36 【问题描述】:

下面的代码显示两个文本输入字段,并根据是否创建启用或禁用按钮。当人们完成表单时,还有一个 javascript 计时器可以启用按钮。

通过动态按钮创建和循环代码来启用或禁用按钮,当表单填充自动完成时,该按钮不会启用,直到在任何地方单击网页或用户在表单中输入字符。这会使人们感到困惑,因为表单已完成但按钮已禁用。

看起来表单实际上并没有完成,只是 Chrome/Firefox 将字段显示为完整,但在用户与页面交互之前实际上并没有这样做。

当表单通过自动完成功能自动完成时,如何让按钮启用?

<input type='text' id='username' autofocus />
<input type='password' id='password' />
<script type="text/javascript">
    if (document.getElementById('username').value != '' && document.getElementById('password').value != '') 
        document.write('<input type="submit" value="Login" />');
     else 
        document.write('<input type="submit" disabled="disabled" value="Login" />');
    
</script>

作为参考,这是在计时器上运行的代码,用于检查表单是否完整。

window.onload = function () 
    var check_interval = 250;
    window.setInterval( function() 
        if (document.getElementById('username').value != '' && document.getElementById('password').value != '') 
            document.getElementById('button').removeAttribute('disabled');
         else 
            document.getElementById('button').setAttribute('disabled', 'disabled');
        
    , check_interval);
;

编辑:onChange 不是解决此问题的好方法,因为自动完成不会在所有浏览器中生成事件。这个question的答案中有一些信息。 onChange 无论如何都不适用于我们的表单,一种表单让用户设置了密码,其中按钮仅在 zxcvbn lib 认为密码足够强时才启用。轮询对此很有效,onChange 似乎只有在用户移动到另一个字段后才会启动。

【问题讨论】:

您是否在每个输入上尝试过 onChange? 【参考方案1】:

使用间隔计时器来检查表单的值绝对不是最好的方法。相反,我建议在两个执行相同操作的表单字段上的 onChange 事件的事件处理程序中使用该代码。当两个字段中都有文本时,该按钮将立即启用。

【讨论】:

@Chris 是的,抱歉直到我输入这个答案后才看到你的评论。但是,是的,这绝对是最好的方法。 无需道歉!这应该是一个正确的答案。如果它适用于用户,我也会给你+1。他可能也可以只用 html 而不是 JS 写出输入按钮,然后禁用或启用该更改。 问题是您不能依赖浏览器在自动完成时触发更改事件。 ***.com/questions/11708092/detecting-browser-autofill 正是链接在那里的答案让我每秒轮询文本字段几次,这应该可以工作。 我想我会添加 onChange 调用作为测试。页面加载,但在我与页面交互之前按钮仍处于禁用状态。

以上是关于使用自动完成填充表单时,Javascript 不启用按钮的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在用户键入时使用第一个 Google Location 返回值自动填充/文本完成表单字段?

禁用 Firefox 自动填充 html 表单但保持自动完成

选中时,jQuery自动完成填充另一个字段

使用角形和镀铬禁用自动填充/自动完成

自动填充2从1个自动完成输入表单输入,以查找代码和价格

如何将此 JavaScript <div> 数据自动填充到 PHP 表单中?