2009-10-23 185 views
5

我的應用程序擁有數百頁。現在我必須在form的onSubmit上附加一個事件'disablePage'。我不想去的每一個頁面,寫上:如何將事件附加到鏈接早期附加方法的onSubmit事件?

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

我在做什麼現在的問題是: -

來自common.js文件摘錄; [包括在所有頁]

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

直到此時一切都很好,disablePage()連接到所有頁面的形式。

但問題是,如果有人已經附加任何方法onSubmit或onLoad那麼也應該執行。我猜根據我的代碼,代碼將永遠不會被執行。 我該怎麼做才能鏈接他們的方法呢?

No JQuery please

回答

4

根據Quirksmode你在做什麼應該實際工作。它應該只是添加你的事件而不是替換舊的。這就是爲什麼你使用addEventListener/attachEvent而不是賦值給onsubmit。

+0

那麼這意味着我不必擔心鏈接方法嗎? – 2009-10-23 14:29:28

+0

我這麼認爲。你有沒有嘗試過?你可以附加兩個事件,看看是否都生效。 – ujh 2009-10-26 13:11:43

1

注意,雖然公認的答案是正確的(事件處理程序被添加,它不會取代現有的事件處理程序),它可能不是用戶所期待的:

事件處理程序可以在被稱爲與其他事件處理程序的任何順序。並且onsubmit處理程序可能會取消提交給服務器。因此,如果您在提交時「禁用」該頁面,則可能會將用戶留在他無法再做任何事情的頁面上...