javascript - Adding a second submit handler -
i trying modify existing web page looks this
<script type="text/javascript" src="s1.js"></script>
s1.js has this
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 = 0; < 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. }
when click submit on form, dovalidate called.
i trying modify page add submit handler called after first one.
i copied above code, changed function names & put 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 = 0; < forms.length; i++) { var form = forms[i]; if(form.addeventlistener) { form.addeventlistener("submit", mynewhandler, false); } else if (form.attachevent) { form.attachevent("onsubmit", mynewhandler); } } }
in form html, added reference it
<script type="text/javascript" src="s1.js"></script> <script type="text/javascript" src="s2.js"></script>
my new submit handler never gets called. debugged through firebug - see dready being called , dom ready handler being registered. myready never gets called, submit handler never gets registered.
what missing here? tried changing order of inclusion of s1.js , s2.js doesn't seem help. want without modifying s1.js
the code provided seems fine! have checked in chrome 25, firefox 19 , ie 10!
normally find easier modify code @ runtime (not source file), javascript being dynamic typed, overwrite dovalidate
function own, passing original dovalidate
through closure in s2.js
:
var originalvalidate = dovalidate; dovalidate = function () { originalvalidate(); alert("my handler"); };
Comments
Post a Comment