2009-10-23 18 views
5

Actaully mi aplicación está teniendo cientos de páginas. Ahora tengo que adjuntar un evento 'disablePage' onSubmit of form. No quiero ir a todos y cada página y escribir:¿Cómo adjuntar un evento al evento de presentación onSubmit con el encadenamiento de los métodos adjuntos anteriores también?

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

lo que estoy haciendo en este momento es: -

extracto del archivo common.js; [Incluido en todas las páginas]

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

Hasta este punto todo está bien, disablePage() se une a las formas de toda la página.

Pero el problema es que si alguien ya ha adjuntado algún método a onSubmit o onLoad, entonces también debería ejecutarse. Y supongo que de acuerdo con mi código, ese código nunca se ejecutará. ¿Qué debo hacer para encadenar su método también?

No JQuery please

Respuesta

4

Según Quirksmode lo que está haciendo en realidad debería funcionar. Simplemente debería agregar sus eventos y no reemplazar los anteriores. Es por eso que utilizas addEventListener/attachEvent en lugar de asignarlo a onsubmit.

+0

¿significa eso que no tengo que preocuparme por encadenar los métodos? –

+0

Creo que sí. ¿Has probado? Podría adjuntar dos eventos y ver si ambos surten efecto. – ujh

1

Tenga en cuenta, que si bien la respuesta aceptada es correcta (se añade el controlador de eventos, que no reemplaza el controlador de eventos existente), podría ser no lo que el usuario espera:

Su controlador de eventos puede ser llamado cualquier orden con los otros manejadores de eventos. Y los controladores onsubmit pueden cancelar el envío al servidor. Entonces, si "deshabilita" la página luego de enviarla, puede dejar al usuario en una página donde ya no puede hacer nada ...

Cuestiones relacionadas