2009-10-23 12 views
5

Actaully uygulamamın yüzlerce sayfası var. Şimdi formunSubmit'i üzerinde bir 'disablePage' etkinliği ekleyeceğim.Daha önceki iliştirilmiş yöntemleri de zincirleme ile form olayı formuna nasıl bir olay eklenir?

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

Ne ben şu anda yapıyorum geçerli:: Ben her sayfasına gidin ve yazma istemiyorum - common.js dosyadan

alıntı; Bu noktada her şey() tüm sayfanın biçimlerine bağlı, disablePage gayet

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

Till [Tüm sayfalarda yer].

Ancak sorun şu ki, birisi onSubmit veya onLoad'a herhangi bir yöntem eklediyse, o zaman bu da yürütülmelidir. Ve koduma göre kodun hiçbir zaman idam edilmeyeceğini tahmin ediyorum. Yöntemlerini de zincirlemek için ne yapmalıyım?

No JQuery please

cevap

4

aslında çalışması gerektiğini ne yaptığını Quirksmode göre. Sadece etkinliklerinizi eklemeli ve eskileri değiştirmemelidir. Bu nedenle, onsubmit için atama yerine addEventListener/attachEvent kullanıyorsunuz.

Sizin olay işleyicisi olarak adlandırılan edilebilir:

+0

Bu, yöntemleri zincirleme konusunda endişelenmem gerekmediği anlamına mı geliyor? –

+0

Sanırım öyle. Denedin mi? İki olay ekleyebilir ve her ikisinin de etkili olup olmadığını görebilirsiniz. – ujh

1

Not kabul cevap doğru ise öyle değil hangi kullanıcı beklediğini olabilir, (olay işleyicisi eklenir, mevcut olay işleyicisi yerine DEĞİLDİR) diğer olay işleyicileri ile herhangi bir sipariş. Ve in-handmit işleyicileri sunucuya gönderimi iptal edebilir. Bu nedenle, gönderdikten sonra sayfayı devre dışı bırakırsanız, kullanıcıyı artık hiçbir şey yapamayacağı bir sayfada bırakabilirsiniz ...

İlgili konular