2009-10-23 5 views
5

Actaully moja aplikacja ma setki stron. Teraz muszę dołączyć zdarzenie "disablePage" w onSubmit formularza. Nie chcę iść do każdego i każdej strony i napisać:Jak dołączyć zdarzenie do zdarzenia onSubmit formularza z wykorzystaniem wcześniej połączonych metod łączenia?

<form name="frmname" onSubmit="disablePage();"> 

co robię teraz, to: -

fragment common.js pliku; [Zawarte we wszystkich stron]

/* we have to attach 'attachFormSubmit' method on onLoad event, 
    otherwise forms[0] will always be null. If there is any alternative, 
    then please suggest one */ 
if (window.addEventListener){ 
    window.addEventListener('load', attachFormSubmit, false); 
} else if (window.attachEvent){ 
    window.attachEvent('onload', attachFormSubmit); 
} 

function attachFormSubmit(){ 
    forms = document.getElementsByTagName('Form'); 
    if (forms[0]){ // there is only one form in all pages  
     if (forms[0].addEventListener){   
      forms[0].addEventListener('submit', disablePage, false); 
     } else if (forms[0].attachEvent){   
      forms[0].attachEvent('onsubmit', disablePage); 
     } 
    } 
} 

function disablePage(){  
    document.getElementById("pageHideDivID").style.display='inline';   
} 

Do tego punktu wszystko jest w porządku, disablePage() jest przymocowany do form wszystkich stronach.

Ale problem polega na tym, że jeśli ktoś już podłączył jakąkolwiek metodę do metody onSubmit lub onLoad, to również powinno zostać wykonane. I zgaduję, według mojego kodu, że kod nigdy nie zostanie wykonany. Co powinienem zrobić, aby połączyć ich metody?

No JQuery please

Odpowiedz

4

Według Quirksmode co robisz powinno faktycznie pracują. Powinien po prostu dodać swoje wydarzenia, a nie zamienić stare. Właśnie dlatego używasz addEventListener/attachEvent zamiast przypisania do onsubmit.

+0

Czy to oznacza, że ​​nie muszę się martwić o łańcuchy metod? –

+0

Tak sądzę. Czy próbowałeś? Możesz po prostu dołączyć dwa zdarzenia i sprawdzić, czy oba działają. – ujh

1

Zauważ, że podczas gdy zaakceptowane odpowiedź jest poprawna (obsługi zdarzeń dodaje, że nie zastępuje istniejącego obsługi zdarzeń), to może być nie to, co użytkownik oczekuje:

Twój obsługi zdarzeń można nazwać w dowolne zamówienie z innymi programami obsługi zdarzeń. Obsługa programów onsubmit może anulować przesyłanie na serwer. Tak więc, jeśli "wyłączysz" stronę po przesłaniu, możesz zostawić użytkownika na stronie, na której nie może już nic zrobić ...

Powiązane problemy