【问题标题】:jQuery fadeIn after items are added using append使用追加添加项目后的jQuery淡入
【发布时间】:2010-12-12 20:51:45
【问题描述】:

请有人把我从痛苦中解救出来....我一小时又一小时地倾注于此...

我已经(这是缩写)创建了一个函数,它使用 append 将框添加到页面。问题是一旦它们被添加,fadeIn 函数就不起作用。 但是,如果我将元素硬编码到页面,它将起作用:

这是我的 javascript:

          //Loop through the images and print them to the page
      for (var i=0; i < totalBoxes; i++){
          //$("p").add(arr).appendTo('#bg');
          $.ajax({
              url: "random.php?no=",
              cache: false,
              success: function(html){
                $(html).fadeIn(html).appendTo('#bg');
              }
          });
      }

    //Choose the image to be faded in
        $(".pf-box img").hover(function(){
        var largePath = $(this).attr("rel");
            $(this).fadeOut("slow", function() {
                    $(this).attr({ src: largePath }).fadeIn("slow");
            });
            return false;
        }); 

random.php 从字面上打印了多少个框...这是一个打印示例:

<div class="pf-box" style="">
<a href="#">
This is where the image is printed with the rel attribute on the image tag. (stackoverflow didnt allow the posting of the img tag because its my first post)
</a>
</div>

【问题讨论】:

    标签: jquery ajax append fadein


    【解决方案1】:

    您的fadeIn 函数的参数似乎不正确。我认为您还希望在淡入之前将 html 附加到文档中。

    在你的成功函数中试试这个?

    function(html) {
        $('#bg').append(html).fadeIn('slow');
    }
    

    您还可能会发现 doc 页面对 fadeIn 很有帮助。

    祝你好运!


    编辑/更新

    好的,我想我知道你现在想要做什么。在您修复了我上面描述的语句(追加然后淡入)之后,您需要做的是在 ajax 检索/追加有机会完成之后分配您的 hover 事件

    发生的情况是,您的第一个代码块正在向网络服务器发出一堆异步 请求,以获取您想要的图像。然后,在您的第一个块“完成”之后,但(重要的是!)在这些请求有机会完成之前,您的第二个代码块正在(试图)执行。它正在寻找选择器“.pf-box img”来尝试添加hover 事件,但问题是,页面上尚不存在这些图像!

    您需要做的是等到图像从服务器返回,然后再尝试选择它们或向它们添加事件。这是通过回调完成的,您已经在 success 函数中进行了部分处理...

    (请注意,我没有测试过这个,它只是为了演示......)

    // Loop through the images and print them to the page.
    // Attach hover event within the callback, after image has been added.
    for (var i=0; i < totalBoxes; i++){
        $.ajax({
            url: "random.php?no=",
            cache: false,
            success: function(html) {
                // following line I originally suggested, but let's make it better...
                //$('#bg').append(html).fadeIn('slow');
                // also note the fine difference between append and appendTo.
                var $d = $(html).hide().appendTo('#bg').fadeIn('slow');
                $('img', $d).hover(function() {
                    var largePath = $(this).attr("rel");
                    $(this).fadeOut("slow", function() {
                        $(this).attr({ src: largePath }).fadeIn("slow");
                    });
                });
            }
        });
    }
    

    【讨论】:

    • 不幸的是,这不起作用。它只是创建了一个淡入淡出的循环...加载到页面的工作正如我所想的那样...问题是,如果附加了该属性,则该函数的第二部分将不起作用...仅如果我将其硬编码...谢谢您的帮助
    • 嗨,...你能告诉我们你想做什么吗?我读到你的问题,因为在使用 append 后,fadeIn 不起作用。但是,也许您问的是悬停功能?我查看了您发布的内容,但无法真正看到您想要做什么(最终结果)。
    • 我想你会发现hover 函数有两个参数,一个用于“over”事件,另一个用于“out”事件。见docs.jquery.com/Events/hover
    • 基于您在此问题中留下的其他一些 cmets,我添加了一个更新,希望能解决您遇到的真正问题?
    • 另外,我没有在您的原始问题中看到 i 变量被传递给您的 random.php 脚本的位置?如果您可以告诉 random.php 脚本您想要多少个 div,我认为您也可以完全取消 for 循环...
    【解决方案2】:

    您误解了fadeIn 方法。

    fadeIn 对现有元素进行操作,并为元素的不透明度设置动画,就像fadeOut 一样。您想将 HTML 附加到您的 #bg 元素,然后将其淡入。

    例如:

                          success: function(html){
                                $(html).appendTo('#bg').fadeIn("slow");
                          }
    

    【讨论】:

    • 如果我添加了这个函数,它会阻止淡入淡出正常工作......我将尝试更好地解释自己......它需要窗口视口的高度和宽度。然后 IT 计算出需要多少个才能填满屏幕。然后它循环遍历从 random.php 中选择它的总量并将其淡入到位。这一切正常。一旦使用附加它淡入淡出,图像就有一个 rel 属性,该属性通过 jquery 拉入以淡入其各自框中的现有图像。但是,这仅在硬编码时才有效。不是如果它附加。感谢大家的帮助。
    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2021-12-02
    相关资源
    最近更新 更多