2009-09-29 6 views
5

Ich habe ein Formular, in dem ich die Schaltfläche zum Senden deaktivieren, bis ein Benutzer alle Pflichtfelder eingegeben hat. Ich benutzte zunächst onkeyup, um eine Registerkarte auf den obligatorischen Feldern zu halten und die Schaltfläche zu aktivieren, wenn alle Pflichtfelder ausgefüllt sind.Trigger JavaScript-Ereignis bei der Verwendung von Google Auto-Füllung auf Firefox

Aber ich hatte Benutzer haben sich beschwert, dass sie das Formular mit AutoFill-Schaltfläche in der Google-Symbolleiste ausgefüllt und die Übermittlungsschaltfläche war noch deaktiviert.

Ich habe dieses Problem im IE behoben, indem ich für jedes Eingabeelement das Ereignis onpropertychange aufgerufen habe, und es hat gut funktioniert.

Aber in Firefox, konnte ich nicht ein Ereignis finden, die ausgelöst werden, wenn die Google Autofill-Schaltfläche geklickt wird.

Hilfe sehr geschätzt.

+0

es ein Problem, 6 Jahre war vor (http://allinthehead.com/retro/102/the-times-they-on-changing) und noch heute. –

+0

Heilige Hölle, AutoFill ist shiite: http://www.google.com/support/forum/p/Toolbar/thread?tid=7dcddc95f43dac19&hl=en –

Antwort

0

Ausgehend von dieser google toolbar support thread, scheint AutoFill nicht nur eine große PITA für Entwickler, sondern auch sehr schwierig abzuschalten. Ab August 09 behauptet Google, dass es das autocomplete="off" Attribut auf dem Enthaltenen form ehren wird, aber ab heute scheint diese Eigenschaft noch nicht veröffentlicht zu werden.

Sie verwenden, können Sie Ihre Eingabeelemente nicht-sensical Namen geben (zB name="xx_Address_32423423") Autofill zu verwechseln (und damit es effektiv deaktivieren), aber sie haben Autofill „intelligente“ von innerhalb von Teil suchen Ihre Elementnamen, um zu bestimmen, ob das Feld automatisch ausgefüllt werden kann oder nicht (wiederum aufgrund von Beschwerden in diesem Thread).

In Ihrem Fall können Sie auch mit den Schlägen rollen und finden Sie eine Entsprechung für onpropertychange für Firefox. Werfen Sie einen Blick auf die DOMAttrModified event. Specifially, versuchen Sie die event.attrName property zu überprüfen, ob die value von autofill geändert wurde:

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

Die Prüfung auf event.propertyName ist kompatibel mit Ihrer aktuellen onpropertychange Implementierung zu bleiben (wenn das überhaupt möglich ist).

1

Danke für Ihre Antworten. Ich musste schnell auf dieses Problem reagieren, daher habe ich die Funktion 'setTimeOut()' verwendet, um nach Pflichtfeldern zu suchen und die Übermittlungsschaltfläche zu aktivieren.

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

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

crescentfresh - ich werde das DOMAttrModified Ereignis schauen und sehen, ob ich es für me.Thanks an der Arbeit kann

0

Es gibt keine Notwendigkeit, komplexen setTimeOut noch setInterval hinzuzufügen.

fangen Sie einfach den „change“ Fall einer nachfüllbaren Textbox der Form, jeden Mehrweg-Bereich durchlaufen und wenn es nicht leer ist verstecken das Etikett

+1

das Änderungsereignis wird nicht ausgelöst und ich kann kein anderes Ereignis sehen das ist auf Autofill gefeuert. Sieht so aus, als ob man $ (window) .load und check $ ('input: -webkit-autofill') machen muss ... aber selbst dann funktioniert es nur manchmal ... Ich denke, es ist besser als nichts, wenn man immer noch sucht die ultimative Lösung. –

+0

Chrome löst keine Ereignisse aus, wenn es automatisch gefüllt wird. – enyo

Verwandte Themen