グローバルを使用せずに、必要に応じてフォームを自動送信する別の方法:
document.getElementById('yourFrm').addEventListener('submit',(function()
{
'use strict';
var imgLoaded,img,tmpImgLoad;
imgLoaded = false;
img = document.getElementById('yourImg');
tmpImgLoad = function ()
{
imgLoaded = true;
img.removeEventListener('load',tmpImgLoad,false);//remove obsolete listener?
};
img.addEventListener('load',tmpImgLoad,false);
return function(e)
{
if (!imgLoaded)
{
tmpImgLoad = function()
{
imgLoaded = true;
img.removeEventListener('load',tmpImgLoad,false);
document.getElementById('yourForm').submit();
};
e.preventDefault();
e.stopPropagation();
}
};
})(),false);
このコードは、load イベント リスナーをイメージ要素にバインドし、クロージャー変数を true に設定します。フォームの送信時にその変数が false の場合、load イベントのコールバックもフォームを送信するように変更されます。
これは少し複雑であることは認めますが、この問題に取り組む方法はグローバルだけではありません。
ロットも JSLint を介して渡しました。いくつかの小さな調整と、「厄介な空白を許容する」と「ブラウザーを想定する」を使用すると、このコードは警告やエラーなしで通過します