2009-09-29 9 views
5

Mam formularz, w którym wyłączam przycisk przesyłania, dopóki użytkownik nie wpisze wszystkich wymaganych pól. Początkowo korzystałem z usługi onkeyup, aby zachować zakładkę w obowiązkowych polach i włączyć przycisk po wypełnieniu wszystkich obowiązkowych pól.Zdarzenie wyzwalacza javascript podczas korzystania z automatycznego wypełniania przez Google firefox

Ale miałem użytkowników narzekających, że wypełnili formularz za pomocą przycisku Autouzupełnianie na pasku narzędzi Google, a przycisk przesyłania nadal był wyłączony.

Rozwiązałem ten problem w IE, wywołując zdarzenie onpropertychange dla każdego elementu wejściowego i działało ładnie.

Jednak w firefox nie mogłem znaleźć zdarzenia, które zostanie wyzwolone po kliknięciu przycisku autouzupełniania google.

Pomoc doceniane.

+0

To był problem 6 lat temu (http://allinthehead.com/retro/102/the-times-one-are-onchanging) i do dziś. –

+0

Święte piekło, autouzupełnianie jest shiite: http://www.google.com/support/forum/p/Toolbar/thread?tid=7dcddc95f43dac19&hl=en –

Odpowiedz

0

Sądząc z tego google toolbar support thread, wydaje się, że autouzupełnianie jest nie tylko ogromną PITA dla programistów, ale także bardzo trudne do wyłączenia. Począwszy od 09 sierpnia Google twierdzi, że będzie honorować atrybut autocomplete="off" na zawierającej go form, ale od dzisiaj ta funkcja nie wydaje się jeszcze dostępna.

Kiedyś, aby móc wysłać swoje elementy wejściowe nazwy non-sensical (np name="xx_Address_32423423") mylić autouzupełnianie (a tym samym skutecznie wyłączyć), ale zrobili autofill bardziej „inteligentny”, patrząc na podciągi ciągu nazwy twoich elementów w celu ustalenia, czy pole może zostać wypełnione automatycznie, czy też nie (ponownie, sądząc po skargach w tym wątku).

W twoim przypadku możesz równie dobrze przetasować ciosami i znaleźć odpowiednik dla przeglądarki Firefox w wersji onpropertychange. Spójrz na DOMAttrModified event. Specifially, spróbuj sprawdzania event.attrName property aby sprawdzić, czy value został zmieniony przez Autouzupełnianiu:

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

Czek dla event.propertyName jest pozostanie w zgodzie z aktualnym onpropertychange realizacji (jeśli to w ogóle możliwe).

1

Dzięki za odpowiedzi. Musiałem szybko zareagować na ten problem, dlatego użyłem funkcji setTimeOut(), aby sprawdzić obowiązkowe pola i włączyć przycisk przesyłania.

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

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

crescentfresh - będę patrzeć w przypadku DOMAttrModified i zobaczyć, czy mogę zmusić go do pracy dla me.thanks

0

Nie ma potrzeby, aby dodać kompleksowy setTimeout ani setInterval.

Wystarczy złapać „zmiana” przypadku jakiegokolwiek ponownego napełnienia tekstowym formularza, przejść przez każdej dziedzinie ponownego napełnienia, a jeśli to nie jest pusty ukryć etykietę

+1

wydarzenie zmiany nie zostało uruchomione i nie widzę żadnego innego zdarzenia to jest wypalane po autouzupełnieniu. Wygląda na to, że musisz zrobić $ (okno) .load i sprawdzić $ ("input: -webkit-autofill") ... ale nawet wtedy działa tylko SOMETIMES ... Myślę, że to lepsze niż nic, jeśli wciąż szukasz ostateczne rozwiązanie. –

+0

Chrome nie uruchamia żadnych zdarzeń po automatycznym wypełnieniu. – enyo

Powiązane problemy