2009-09-29 65 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