5

我的应用程序有数百页。现在我必须disablePageonSubmit表单上附加一个事件。我不想去每一页写:

<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也应该执行该方法。我猜根据我的代码,代码永远不会被执行。我应该怎么做才能链接他们的方法呢?

请不要使用 JQuery。

4

2 回答 2

4

根据Quirksmode的说法,您正在做的事情应该确实有效。它应该只添加您的事件而不是替换旧的事件。这就是为什么您使用 addEventListener/attachEvent 而不是分配给 onsubmit 的原因。

于 2009-10-23T14:18:19.793 回答
1

请注意,虽然接受的答案是正确的(添加了事件处理程序,但它不会替换现有的事件处理程序),但它可能不是用户期望的:

您的事件处理程序可以与其他事件处理程序一起以任何顺序调用。并且 onsubmit 处理程序可能会取消向服务器的提交。因此,如果您在提交时“禁用”该页面,您可能会将用户留在一个他无法再做任何事情的页面上......

于 2010-11-22T10:35:13.860 回答