0

以下は(明らかに)より大きなプロジェクトの一部であり、Chrome、Firefox、および Opera で正常に動作していますが、.click() 関数は IE9 または 10 によって呼び出されていません。

jQuery('.current img').hover(function() {
    var thisElem = jQuery(this);

    thisElem.parent().parent().find('.hotspot span:not(.select-image)').remove();
    thisElem.parent().parent().find('.hotspot img').parent().find('span.select-image').remove();

    jQuery('<span class="zoom-out"></span>').prependTo(thisElem.parent()).click(function() {
        z -= .1;
        z = Math.max(z, 1);

        jQuery(this).parent().find('img').attr('src', '<?php echo $urlPrefix; ?>/zcard-thumbnail-image/photos/<?php echo $modelId; ?>/low/' + i + '/' + (w * z) + '/' + (h * z) + '/file');
    });

    jQuery('<span class="select-image"></span>').prependTo(thisElem.parent());

    jQuery('<span class="zoom-in"></span>').prependTo(thisElem.parent()).click(function() {
        z += .1;
        z = Math.min(z, 5);

        jQuery(this).parent().find('img').attr('src', '<?php echo $urlPrefix; ?>/zcard-thumbnail-image/photos/<?php echo $modelId; ?>/low/' + i + '/' + (w * z) + '/' + (h * z) + '/file');
    });
});

私が知る限り、要素がまだ存在しないため、 .click() はバインドされていません。代わりに jQuery(target).prepend(element) を使用し、それ以上の実行を遅らせるアラートを使用し、次に .click() バインドすると、すべて正常に動作します。残念ながら、アラートを delay() に置き換えても、同じ結果にはなりません。

誰か提案がありますか?

4

3 に答える 3

1

要素を識別するセレクターを作成できる場合は、delegate()を使用してハンドラーをアタッチできます。これは、まだ存在しない要素に対して機能します。

于 2013-05-19T16:56:21.163 に答える
0

試したことがないので、とにかく遅延が問題であるかどうかはわかりませんが、手動の setTimeout で遅延を試すことができます。

var zoomOutSpan = jQuery('<span class="zoom-out"></span>').prependTo(thisElem.parent());

setTimeout( function()
{
    zoomOutSpan.click(function() {
        z -= .1;
        z = Math.max(z, 1);

        jQuery(this).parent().find('img').attr('src', '<?php echo $urlPrefix; ?>/zcard-thumbnail-image/photos/<?php echo $modelId; ?>/low/' + i + '/' + (w * z) + '/' + (h * z) + '/file');
    });
}, 1) // just 1 milisecond to execute it on a new thread
于 2013-05-19T16:59:17.087 に答える