1

嘿 Stackoverflowianers,

希望你们一切都好。我的问题:

我尝试在动态加载的元素上更改一些 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');
    });
}

第二段代码是:

$.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 回答