1

Stackoverflowian の皆さん、

どうかお元気で。私の問題:

動的にロードされた要素の css を変更しようとしています。だから私は ajax 呼び出しを行い、成功すると結果の html を依存する要素に書き込み、完了したら関数を実行します。関数は (それぞれによって) これらすべての要素を通過し、一部の css を変更します。

問題は:

  1. メソッドの前に権利を設定し、alert('test')実行時にすべてクリックすると機能します
  2. コード スニペットは、ff のコンソールにコピーして手動で実行すると機能します
  3. 行をコメントアウトすると、期待どおりに機能しませんalert('test')... grmlfx

最初のコード:

function fixRounded()
{
    $('img.round').each(function(){
        var w = $(this).css('width');
        var h = $(this).css('height');
        //alert('test');
        $(this).parent('div').parent('.imgr').css('background-size',w+' '+h).css('background-position','3px 3px');
        $(this).parent('div').parent('div').parent('.imgr').css('background-size',w+' '+h).css('background-position','3px 3px');
    });
}

2 番目のコードは次のとおりです。

$.ajax({
    type: "POST",
    url: "search_ajax.php",
    data: dataString,
    cache: false,
    success: function(html)
    {
        $('#content').css('display', 'block');
        $('span.searchentry').text(searchbox);
        $("#searchResult"+what).html(html);
        $('#'+what+'-slider').catslider();
        roundImg();
    },
    complete: function()
    {
        fixRounded();
    }
});

私の問題をできるだけわかりやすく説明できれば幸いです。この問題を解決する方法について、正しい方向へのヒントを教えてください。

よろしくお願いします、

エースライン

4

2 に答える 2

0

fixRounded要素がDOMに追加される前に実行されるようです。呼び出し、またはコンソールのalert使用により、わずかな遅延が発生する可能性がありますが、要素が完全に追加されるのに十分な時間です。

これを試してみませんか:

$.ajax({
    type: "POST",
    url: "search_ajax.php",
    data: dataString,
    cache: false,
    success: function(html)
    {
        $('#content').css('display', 'block');
        $('span.searchentry').text(searchbox);
        $("#searchResult"+what).html(html);
        $('#'+what+'-slider').catslider();
        roundImg();
        fixRounded();
    }
});

編集:問題はタイミングだと思います。フィドルや概念実証がなければ、わかりません。

通話をさらに遅らせてみてください。

function fixRounded()
{
    $('img.round').each(function(){
        var $this = $(this),
        w = $this.css('width'),
        h = $this.css('height');

        $this.parents('.imgr').css({
            'background-size': w + ' ' + h,
            'background-position': '3px 3px'
        });
    });
}

$.ajax({
    type: "POST",
    url: "search_ajax.php",
    data: dataString,
    cache: false,
    success: function(html)
    {
        $('#content').css('display', 'block');
        $('span.searchentry').text(searchbox);
        $("#searchResult"+what).html(html);
        $('#'+what+'-slider').catslider();
        roundImg();
        setTimeout(fixRounded,1000);
    }
});
于 2013-06-15T09:20:40.097 に答える
0

@Ast Derekの回答に追加するとpromise、完了の代わりに使用できます。関数done()を実行するために使用します。fixRounded()

     $.ajax({
       type: "POST",
       url: "search_ajax.php",
       data: dataString,
       cache: false,
       success: function(html)
       {
          $('#content').css('display', 'block');
          $('span.searchentry').text(searchbox);
          $("#searchResult"+what).html(html);
          $('#'+what+'-slider').catslider();
          roundImg();
       }
    }).done(fixRounded);

ajax()promise()done()のドキュメントを参照してください

于 2013-06-15T09:22:03.437 に答える