添加第二个提交处理程序

时间:2013-03-04 12:49:01

标签: javascript javascript-events

我正在尝试修改现有的网页

<script type="text/javascript" src="s1.js"></script>

s1.js有类似的东西

window.onDomReady = DomReady;

function DomReady(fn)
{
    if(document.addEventListener)
    {
        document.addEventListener("DOMContentLoaded", fn, false);
    }
    else
    {
        document.onreadystatechange = function(){chState(fn);};
    }
}

function chState(fn)
{
    if(document.readyState == "interactive" || document.readyState == "complete")
        fn();
}


window.onDomReady(addHndlrs);

function addHndlrs()
{
    var forms = document.getElementsByTagName("form");
    for(var i = 0; i < forms.length; i++) 
    {
        var form = forms[i];
        if(form.addEventListener)
        {
            form.addEventListener("submit", DoValidate, false);
        }
        else if (form.attachEvent)
        {
            form.attachEvent("onsubmit", DoValidate);
        } 

        Other stuff.

    }

当我在表单上单击“提交”时,DoValidate会调用。

我正在尝试修改此页面以添加另一个在第一个之后调用的提交处理程序。

我复制了上面的代码,更改了功能名称&amp;放入s2.js。

window.onDomReady = DReady;

function DReady(fn)
{
    if(document.addEventListener)
    {
        document.addEventListener("DOMContentLoaded", fn, false);
    }
    else
    {
        document.onreadystatechange = function(){Chk1State(fn);};
    }
}

function Chk1State(fn)
{
    if(document.readyState == "interactive" || document.readyState == "complete")
        fn();
}

window.onDomReady(myready);

function myready()
{
    var forms = document.getElementsByTagName("form");
    for(var i = 0; i < forms.length; i++) 
    {
        var form = forms[i];
        if(form.addEventListener) 
        {
            form.addEventListener("submit", mynewhandler, false);
        }
        else if (form.attachEvent) 
        {
            form.attachEvent("onsubmit", mynewhandler);
        }
    }

}

在html表单中,我添加了对它的引用

<script type="text/javascript" src="s1.js"></script>
<script type="text/javascript" src="s2.js"></script>

我的新提交处理程序永远不会被调用。我通过firebug调试它 - 我看到DReady被调用,我的DOM Ready处理程序正在注册。但是myready永远不会被调用,所以我的提交处理程序永远不会被注册。

我在这里缺少什么?我尝试改变包含s1.js和s2.js的顺序,但这似乎没有帮助。我想这样做而不修改s1.js

1 个答案:

答案 0 :(得分:4)

您提供的代码似乎没问题!已经检查过Chrome 25,FireFox 19和IE 10!

通常我发现在运行时(而不是源文件)修改代码更容易,因为JavaScript是动态类型的,你可以用自己的函数覆盖DoValidate函数,并将原始{{1}传递给它通过DoValidate中的闭包:

s2.js