Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 添加第二个提交处理程序_Javascript_Javascript Events - Fatal编程技术网

Javascript 添加第二个提交处理程序

Javascript 添加第二个提交处理程序,javascript,javascript-events,Javascript,Javascript Events,我正在尝试修改一个现有的网页,看起来像这样 <script type="text/javascript" src="s1.js"></script> window.onDomReady = DomReady; function DomReady(fn) { if(document.addEventListener) { document.addEventListener("DOMContentLoaded", fn, false);

我正在尝试修改一个现有的网页,看起来像这样

<script type="text/javascript" src="s1.js"></script>
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.

    }

s1.js有类似的内容

<script type="text/javascript" src="s1.js"></script>
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.

    }
window.onDomReady=domrready;
功能DomReady(fn)
{
if(文件增补列表器)
{
文件。addEventListener(“DOMContentLoaded”,fn,false);
}
其他的
{
document.onreadystatechange=function(){chState(fn);};
}
}
函数chState(fn)
{
if(document.readyState==“交互式”| | document.readyState==“完成”)
fn();
}
window.onDomReady(addHndlrs);
函数addHndlrs()
{
var forms=document.getElementsByTagName(“表单”);
对于(var i=0;i
当我在表单上单击Submit时,DoValidate不会被调用

我试图修改此页面以添加另一个提交处理程序,该处理程序在第一个提交处理程序之后调用

我复制了上面的代码,更改了函数名并将其放入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);
        }
    }

}
window.onDomReady=DReady;
功能可怕(fn)
{
if(文件增补列表器)
{
文件。addEventListener(“DOMContentLoaded”,fn,false);
}
其他的
{
document.onreadystatechange=函数(){Chk1State(fn);};
}
}
功能CHK1状态(fn)
{
if(document.readyState==“交互式”| | document.readyState==“完成”)
fn();
}
window.onDomReady(myready);
函数myready()
{
var forms=document.getElementsByTagName(“表单”);
对于(var i=0;i
在html表单中,我添加了对它的引用

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

我的新提交处理程序从未被调用。我通过firebug调试了它-我看到DReady被调用,我的DOM就绪处理程序被注册。但是myready从未被调用,所以我的提交处理程序从未被注册


我在这里遗漏了什么?我试图改变s1.js和s2.js的包含顺序,但似乎没有帮助。我想在不修改s1.js的情况下完成这项工作。您提供的代码似乎很好!已登录Chrome 25、FireFox 19和IE 10

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

var originalValidate = DoValidate;
DoValidate = function () {
    originalValidate();
    alert("my handler");
};

您提供的代码似乎很好!已经登录了Chrome 25、FireFox 19和IE 10

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

var originalValidate = DoValidate;
DoValidate = function () {
    originalValidate();
    alert("my handler");
};

只需在“DoValidate”函数的末尾添加对函数的调用。@JoelDuret否-我想在不修改s1.js的情况下执行此操作。只需在“DoValidate”函数的末尾添加对函数的调用即可函数。@JoelDuret No-我想在不修改s1.js.Worked的情况下完成此操作。太好了。不是一个普通的javascript程序员-我甚至不知道有人可以用这种方式覆盖函数。比我尝试的所有东西都简单。Worked。太好了。不是一个普通的javascript程序员-我甚至不知道有人可以用这种方式覆盖函数。更简单我试过的所有东西都是A。