【问题标题】:Trigger JavaScript event when using Google auto fill on Firefox在 Firefox 上使用 Google 自动填充时触发 javascript 事件
【发布时间】:2010-12-02 08:31:17
【问题描述】:

我有一个表单,我在其中禁用提交按钮,直到用户输入所有必填字段。我最初使用 onkeyup 在必填字段上保留一个选项卡,并在填写所有必填字段时启用按钮。

但我有用户抱怨他们使用 Google 工具栏上的自动填充按钮填写表单,而提交按钮仍然被禁用。

我通过为每个输入元素调用 onpropertychange 事件在 IE 中解决了这个问题,并且效果很好。

但在 Firefox 中,我找不到在点击 google 自动填充按钮时触发的事件。

非常感谢您的帮助。

【问题讨论】:

标签: javascript firefox javascript-events


【解决方案1】:

无需添加复杂的 setTimeOut 或 setInterval。

只需捕捉表单的任何可重新填充文本框的“更改”事件,遍历每个可重新填充字段,如果它不为空,则隐藏标签

【讨论】:

  • 没有触发更改事件,我看不到自动填充时触发的任何其他事件。看起来必须做 $(window).load 并检查 $('input:-webkit-autofill')... 但即使这样它也只有有时有效...我认为如果你还在寻找它总比没有好最终解决方案。
  • Chrome 在自动填充时不会触发任何事件。
【解决方案2】:

感谢您的回答。我必须快速响应这个问题,因此我使用了“setTimeOut()”函数来检查必填字段并启用提交按钮。

$().ready(function() {
    CheckRequiredFields();
    timeOutRtn = setTimeout("AutoMonitorMandatoryField()", "3000");
});

function AutoMonitorMandatoryField() {
    if ($("#btnSave").attr("disabled")) {
        CheckRequiredFields();
        timeOutRtn = setTimeout("AutoMonitorMandatoryField()", "3000");
    }
}

crescentfresh - 我会调查 DOMAttrModified 事件,看看能否让它为我工作。谢谢

【讨论】:

    【解决方案3】:

    从这个google toolbar support thread来看,似乎自动填充对于开发者来说不仅是一个巨大的PITA,而且很难关闭。截至 8 月 9 日,谷歌声称它将尊重包含 formautocomplete="off" 属性,但截至今天,此功能似乎尚未发布。

    您过去可以为输入元素指定无意义的名称(例如 name="xx_Address_32423423")以混淆自动填充(从而有效地禁用它),但是通过查看 ,它们使自动填充更加“智能”元素名称中的子字符串,以确定该字段是否可以自动填充(同样,从该线程中的投诉判断)。

    在您的情况下,您不妨顺势而为,并为 Firefox 找到 onpropertychange 的等价物。看看DOMAttrModified event。具体来说,尝试检查event.attrName property 以查看value 是否已被自动填充更改:

    function realOnChange(event) {
        var attrName = event.propertyName || event.attrName;
        if(attrName === 'value') {
            // etc
        }
    }
    

    检查event.propertyName 是为了与您当前的onpropertychange 实现保持兼容(如果可能的话)。

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 2013-02-27
      • 2016-01-15
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 2014-05-12
      相关资源
      最近更新 更多