2009-09-29 86 views
5

我有一个表单,其中我禁用了提交按钮,直到用户键入所有必填字段。我最初使用onkeyup在必填字段上保留选项卡,并在填写所有必填字段时启用按钮。在Firefox上使用Google自动填充时触发javascript事件

但我让用户抱怨说他们在Google工具栏上使用自动填充按钮填写表单,并且提交按钮仍然被禁用。

我通过为每个输入元素调用onpropertychange事件来解决IE中的这个问题,它很好地工作。

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

非常感谢。

+0

6年前这是一个问题(http://allinthehead.com /复古/ 102 /时代 - 他们正在改变),今天依然如此。 – 2009-09-29 14:58:32

+0

神圣地狱,自动填充是shiite:http://www.google.com/support/forum/p/Toolbar/thread?tid=7dcddc95f43dac19&hl=zh-CN – 2009-09-29 15:09:32

回答

0

从这个google toolbar support thread来看,自动填充不仅对开发者来说是一个庞大的PITA,而且很难关闭。截至09年8月谷歌声称它会兑现form上的autocomplete="off"属性,但截至今日,该功能似乎还没有发布。

你曾经是能够给你的输入元素无意义的名称(如name="xx_Address_32423423")混淆自动填充(从而有效地禁用它),但是他们已经通过看内进行自动填充更“聪明”您的元素名称,以确定该字段是否可以自动填充(再次,从该线程中的投诉来判断)。

对于您的情况,您最好还是打出一拳,找到相当于Firefox的onpropertychange。看看DOMAttrModified event。 Specifially,尝试检查event.attrName property,看是否value已被自动填写改变:

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

event.propertyName的检查是保持兼容当前的onpropertychange实现(如果这甚至有可能)。

1

感谢您的回答。我不得不迅速回应这个问题,因此我使用'setTimeOut()'函数来检查必填字段并启用提交按钮。

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

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

crescentfresh - 我会考虑的DOMAttrModified事件,看看我能得到它的me.Thanks

0

有没有必要添加复杂的setTimeout也不setInterval的工作。

正好赶上形式的任何充装文本框的“改变”事件,经过每一个充装现场,如果它不是空的隐藏标签

+1

更改事件未被解雇,我看不到任何其他事件这是在自动填充时被解雇的。看起来像必须做$(window).load并检查$('input:-webkit-autofill')...但即使如此,它只有有时候工作...我认为它好于没有,如果你仍然在寻找最终的解决方案。 – 2012-01-19 09:54:48

+0

Chrome在自动填充时不会触发任何事件。 – enyo 2012-03-14 13:27:35