Attention! Translated article might be found on my English blog.

2015年7月19日日曜日

jQueryのloadハンドラが複数回呼ばれるときはunbindする

画像ロード時にスピン画像を表示させる処理を実装していたのですが、
imgのsrcを変更するたびにloadハンドラが呼ばれる回数が増えていくことに気づきました。
コードは以下のような感じです。

    var src = $('#viewer').attr('src', url);
    src.load(function() {
        // do some stuff
    });
javascript - jQuery event firing twice after .load() - Stack Overflow によると、
逐一loadハンドラをunbindする必要があるようです。
修正後のコードは以下の通り。
    var src = $('#viewer').attr('src', url);
    src.unbind('load'); // loadが複数呼ばれないようにするのに必要
    src.load(function() {
        // do some stuff
    });
これで複数回実行されることは無くなりました。

ていうか、初期化処理時に1度だけload()を実装し、
画像変更時にはsrcの変更のみ行うっていう方法で良いのかもしれません。