2009-10-23 4 views
5

Actully meine Anwendung hat Hunderte von Seiten. Jetzt muss ich ein Ereignis 'disablePage' bei onSubmit des Formulars anhängen. Ich mag nicht für jeden und jede Seite gehen und schreiben:Wie wird ein Ereignis an onSubmit-Ereignis des Formulars angehängt, indem früher angefügte Methoden verkettet werden?

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

, was ich jetzt tue, ist: -

Auszug aus common.js Datei; [Auf allen Seiten eingeschlossen]

/* 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';   
} 

bis zu diesem Punkt alles ist in Ordnung, disablePage() auf die Formen aller Seite angebracht ist.

Aber das Problem ist, wenn jemand bereits eine Methode an onSubmit oder onLoad angehängt hat, dann sollte das auch ausgeführt werden. Und ich denke, dass Code nach meinem Code niemals ausgeführt wird. Was soll ich tun, um ihre Methode zu verketten?

No JQuery please

Antwort

4

Nach Quirksmode was sollte man tun, tatsächlich arbeiten. Es sollte nur Ihre Ereignisse hinzufügen und nicht die alten ersetzen. Aus diesem Grund verwenden Sie addEventListener/attachEvent anstelle der Zuweisung zu onsubmit.

+0

also bedeutet das, ich muss mir keine Sorgen über die Verkettung der Methoden machen? –

+0

Ich denke schon. Hast du es versucht? Sie könnten einfach zwei Ereignisse anhängen und sehen, ob beide wirksam werden. – ujh

1

Beachten Sie, dass, während die akzeptierte Antwort korrekt ist (die Event-Handler hinzugefügt wird, ist es nicht die bestehenden Event-Handler ersetzen), könnte es sein, nicht das, was der Benutzer erwartet:

Ihre Event-Handler in aufgerufen werden können jede Bestellung mit den anderen Event-Handlern. Und Onsubmit-Handler können die Übermittlung an den Server abbrechen. Also, wenn Sie die Seite beim Senden "deaktivieren", können Sie den Benutzer auf einer Seite verlassen, wo er nichts mehr tun kann ...