0

広告主の 1 つは、次の Javascript 関数を含むランディング ページを持っています。

sfHover = function() {
    if (!document.getElementsByTagName) return false;
    var sfEls1 = document.getElementById("catmenu").getElementsByTagName("li");
    for (var i=0; i<sfEls1.length; i++) {
        sfEls1[i].onmouseover=function() {
            this.className+=" sfhover1";
        }
        sfEls1[i].onmouseout=function() {
            this.className=this.className.replace(new RegExp(" sfhover1\\b"), "");
        }
    }
        var sfEls1 = document.getElementById("menu").getElementsByTagName("li");
    for (var i=0; i<sfEls1.length; i++) {
        sfEls1[i].onmouseover=function() {
            this.className+=" sfhover";
        }
        sfEls1[i].onmouseout=function() {
            this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
        }
    }
}

IE7 でページに移動すると、そのif行で構文エラーが報告されます。私が知る限り、これは完全に優れた構文です。IE8 は文句を言いませんし、Chrome も文句を言いません。私が見ることができる唯一の潜在的な問題は、return false;ステートメントが中括弧で囲まれていないことですが、それらはオプションです。それらを追加しようとしましたが、エラーは解決しませんでした。

これはIE7のバグですか?

アップデート:

この関数定義以外はすべてページから削除して、ロードする他の多くのスクリプトのいずれかと関連しないようにしました。エラーは引き続き発生しました。

行以外のすべてを削除するifと、エラーはなくなりました。次の行を追加し直したところ、エラーが返されました。興味深いのは、2 行目で予想されるエラーが発生することです。 catmenu(すべての HTML を削除する前であっても) ページに要素がないため、 document.getElementById(...) is null or not an object. この問題について広告主に知らせるよう、マーケティング担当者に依頼しました。

この論理エラーにより、前の行に構文エラーがあると IE7 が判断する可能性はありますか? ページに要素を追加したcatmenuところ、構文エラーもなくなりました。

次に、残りの関数を追加し直しました。2 番目のsfEls1割り当ても、存在しない ID を参照しています。これにより、前の}行が構文エラーとして報告されました! これは奇妙なIE7のバグであることを確認していると思います.

4

2 に答える 2

2

これは IE7 のエラー レポート バグのようです。エラーが報告された場合:

'document.getElementById(...)' is null or not an object

getElementById()ページで ID が見つからないため、この前の行で余分な構文エラーも報告されます。

したがって、このエラー メッセージが訴えている構文エラーではなく、関数にエラーがあります。MS は IE8 でこのエラー報告バグを修正したようです -- 互換モードはエラーを再現しません。

于 2013-01-03T18:45:21.537 に答える
0

変数を2回宣言しているように見えますsfEls1

于 2013-01-03T18:08:33.020 に答える