1

私のスクリプトは、画像をロードするためのコードをテーブルに追加します。ただし、テーブルの内容から画像リンクを解釈します。これにより、エラーのない画像が読み込まれることがあります。最初の画像が失敗した場合に読み込まれるプレースホルダー画像を作成しましたが、このプレースホルダーが読み込まれなかった場合、スクリプトは無限ループに入ります。

$(document).ready(function() {
    $('tr[id^="mini"]').each(function(index) {
        var s = $(this).find('td:first');
        var product = s.text().replace(/\s+/g, '');
        s.append('<br><a href="/-p/' + product + '.htm" target="_blank">View Live</a><br><a title="Click for bigger image" href="/PhotoDetails.asp?ShowDESC=Y\&amp;ProductCode=' + product + '" onclick="window.open(\'/PhotoDetails.asp?ShowDESC=Y\&amp;ProductCode=' + product + '\',\'Option\',\'scrollbars=yes,menubar=no,status=no,location=no,width=600,height=640\'); return false;" target="_blank"><img src="/v/vspfiles/photos/' + product + '-0.jpg" border="0" style="max-width:150px;max-height:150px" id="monkey-inserted-image" /></a>');
    });
    // This checks for images that do not load //
    $('img#monkey-inserted-image').error(function() {
        $(this).removeAttr("id").attr("src", "/tamper/noimage1.png");
        // If this image fails to load, an infinite loop is created //
    });
});

ループを停止することを期待して.removeAttr()を使用してみましたが、停止しません。

4

4 に答える 4

3

なぜこれを期待しないのですか?基本的に、失敗するたびに再試行するように指示しているため、明らかにsrc悪い場合は毎回失敗します。

removeAttr()、あなたが思っていることをしません。イベントはすでに登録されています。error登録を解除しようとしている場合は、別の方法で行う必要があります。

おそらく次のようになります。

$(this).unbind('error');
于 2012-12-13T09:56:59.403 に答える
2

プレースホルダーを設定するときは、ハンドラーの登録errorを解除する必要があります。

$('img#monkey-inserted-image').error(function() {
    $(this).unbind("error").attr("src", "/tamper/noimage1.png");
    // No more infinite loop :-)
});
于 2012-12-13T09:58:14.240 に答える
0

エラーを処理するときは、置換イメージが読み込まれない場合にイベントが無限に発生しないように、そのイベントのバインドを解除する必要があります。

$('img#monkey-inserted-image').on('error', function() {
        $(this).off('error').attr("src", "/tamper/noimage1.png");
        // If this image fails to load, an infinite loop is created //
    });
于 2012-12-13T09:57:57.190 に答える
0

無限ループは「正常」です。画像のエラー イベントをリッスンしているため、デフォルトのプレースホルダー画像がエラーをトリガーした場合、関数が呼び出され、そのプレースホルダー画像を再配置しようとするため、エラー イベントがトリガーされ、プレースホルダーを再配置しようとします.. .まあ、私はあなたがそれを得ると思います。

src画像の属性を確認できます。また、既にプレースホルダー イメージを処理している場合は、何もしない (またはフォールバックする) だけです。

$('img#monkey-inserted-image').error(function() {
    if ($(this).attr('src') == '/tamper/noimage1.png')) {
        // Do your fallback here
        return;
    }

    $(this).removeAttr("id").attr("src", "/tamper/noimage1.png");
    // If this image fails to load, an infinite loop is created //
});
于 2012-12-13T09:57:58.897 に答える