このような既存のWebページを変更しようとしています
<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 が呼び出されます。
このページを変更して、最初の送信ハンドラーの後に呼び出される別の送信ハンドラーを追加しようとしています。
上記のコードをコピーし、関数名を変更して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を変更せずにこれを行いたい