【问题标题】:How to attach an event to onSubmit event of form with chaining earlier attached methods as well?如何通过链接早期附加方法将事件附加到表单的 onSubmit 事件?
【发布时间】:2009-10-23 14:13:38
【问题描述】:

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

<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() 已附加到所有页面的表单中。

但问题是,如果有人已经将任何方法附加到onSubmitonLoad,那么也应该执行。我猜根据我的代码,代码永远不会被执行。 我应该怎么做才能链接他们的方法?

请不要使用 JQuery。

【问题讨论】:

    标签: javascript dom-events chaining method-chaining


    【解决方案1】:

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

    【讨论】:

    • 这是否意味着我不必担心链接方法?
    • 我想是的。你有没有尝试过?你可以只附加两个事件,看看是否都生效。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      相关资源
      最近更新 更多