2009-10-23 8 views
5

En effet, mon application a des centaines de pages. Maintenant, je dois attacher un événement 'disablePage' sur onSubmit de formulaire. Je ne veux pas aller à chaque page et écrire:Comment attacher un événement à l'événement onSubmit d'un formulaire en enchaînant des méthodes attachées plus tôt?

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

Ce que je suis en train de faire est maintenant: -

extrait

du fichier common.js; [Inclus dans toutes les pages]

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

Jusqu'à ce point, tout est bien, disablePage() est attaché aux formes de toutes les pages.

Mais le problème est que si quelqu'un a déjà attaché une méthode à onSubmit ou à onLoad, cela devrait également être exécuté. Et je suppose que selon mon code, ce code ne sera jamais exécuté. Que dois-je faire pour chaîner leur méthode?

No JQuery please

Répondre

4

Selon Quirksmode ce que vous faites réellement travailler devrait. Il devrait simplement ajouter vos événements et ne pas remplacer les anciens. C'est pourquoi vous utilisez addEventListener/attachEvent au lieu d'assignation à onsubmit.

+0

Est-ce que cela signifie que je n'ai pas à m'inquiéter de chaîner les méthodes? –

+0

Je le pense. As-tu essayé? Vous pouvez simplement attacher deux événements et voir si les deux prennent effet. – ujh

1

Notez que si la réponse acceptée est correcte (le gestionnaire d'événement est ajouté, il ne remplace pas le gestionnaire d'événement existant), il peut être pas ce que l'utilisateur attend:

Votre gestionnaire d'événements peut être appelé tout ordre avec les autres gestionnaires d'événements. Et les gestionnaires d'onsubmit peuvent annuler la soumission au serveur. Donc, si vous "désactivez" la page lors de la soumission, vous pouvez laisser l'utilisateur sur une page où il ne peut plus rien faire ...

Questions connexes