0

これは何が起こったかの非常に単純化された例です

jQuery(".resultAction").each(makeItso);

function makeItso() {
    //code executes (it was a conditional to test for a file extension and display apply a class)
    //the short version:
    jQuery(this).find("#indicator").addClass("is" + fileExtension.slice(1));

    //no file extension hide the icon div "indicator"
    if ((fileExtension.indexOf('.') == -1)) {
        jQuery(this).find("#indicator").addClass("not");
    }

}

現在、これはうまく機能し、1 ページあたり約 100 件の結果があったため、.ready() よりも高速に機能しました。

しかし、1 つのバグがありました: 最後の要素では実行されませんでした。そのため、ページが読み込まれた後に最後の項目で関数を再実行するためにこれを行いました。

jQuery(document).ready(function(){
    jQuery(".resultAction:last").each(makeItso);
});

要するに、これは Firefox、IE 7、8、9 でうまく機能しましたが、興味深い点は次のとおりです。Mac と VMware Fusion を使用してテストしたので、問題ないと「思った」テスターは彼らの PC と IE 8 --Epic は失敗します。

私は何かを学びました: 仮想マシンでの #1 テストは、実際の取引と同じではありません。また、私の質問は、なぜこれが IE 8 でクラッシュし、それ以外の場合は 9 と Fox で正常に動作したのですか? コーディングが下手だったのでしょうか?

4

1 に答える 1

1

id="indicator"内部に everyを持つ要素があるようです.resultAction。各 ID はページ上で一意である必要があります。一部のブラウザーは、この制限を気にしない場合があります。他の人もそうかもしれません。

を に変更するid="indicator"class="indicator"、役立つ場合があります。

最後の行で実行されていないという他の問題については、スクリプトが操作している要素よりも HTML で後で来ることを確認している限り、document.ready を待つ必要はありません。<script>つまり、ボディの前にタグを最後に置きます。これを実行しても機能しない場合は、完全な html を確認する必要があります。

于 2012-11-26T23:14:37.217 に答える