fadeIn 或 show 不适用于由 ajax 加载/添加的元素

发布于 2024-12-03 12:17:21 字数 741 浏览 1 评论 0原文

我搜索了类似的问题,但没有运气。

如果我用ajax向DOM添加一个元素,我无法控制它。我知道,实时方法适用于事件,但我只想显示/淡出它。

有办法控制这些吗?

$("#menu > div > ul > li > a").click(function(){
    var page = $(this).attr("href").replace('#','');
    $.ajax({
        url: page + '.php',
        beforeSend: function() { $("#page").fadeOut(); $('#loader').fadeIn("slow"); },
        complete: function() { $('#loader').fadeOut(); },
        success: function(data){
            $('body').append(data);
            $(data).show();
        }
    });
});

数据包含以下内容,它是一个字符串;

<div id="container-01"> <div class="left"> left </div> <div class="right"> right </div> </div>

谢谢。

I searched for similar questions but no luck.

If I add an element to DOM with ajax, I can't control it. I know, live method will works for events but I just want to show/fade it.

Is there a way to control those ?

$("#menu > div > ul > li > a").click(function(){
    var page = $(this).attr("href").replace('#','');
    $.ajax({
        url: page + '.php',
        beforeSend: function() { $("#page").fadeOut(); $('#loader').fadeIn("slow"); },
        complete: function() { $('#loader').fadeOut(); },
        success: function(data){
            $('body').append(data);
            $(data).show();
        }
    });
});

The data contains following and Its a string;

<div id="container-01"> <div class="left"> left </div> <div class="right"> right </div> </div>

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

娇纵 2024-12-10 12:17:21

我认为如果将所有加载的内容放入包装元素中并尝试切换此包装,效果会更好。顺便说一句,

...
success: function(data){
            $('#mywrapper').html(data);
            $('#mywrapper').show();
        }
...

这假设您的数据是 HTML。

编辑:看到您传递的数据,您可以轻松地这样做:

...
success: function(data){
            $('body').append(data);
            $('#container-01').show();
        }
...

这将需要一个 #container-01{display:none;} 样式规则,但我想这应该没问题。

I think you'd be better off if you put all your loaded content into a wrapper element and try to toggle this wrapper. Sth like:

...
success: function(data){
            $('#mywrapper').html(data);
            $('#mywrapper').show();
        }
...

This assumes that your data is HTML, btw.

EDIT: seeing your passed data you could easily do it like this:

...
success: function(data){
            $('body').append(data);
            $('#container-01').show();
        }
...

This will need an #container-01{display:none;} style rule, but I guess that should be ok.

月朦胧 2024-12-10 12:17:21

是的,您需要在回调函数上执行此操作,您将获取数据,然后淡入淡出。但是您可能需要在淡入之前先隐藏内容。您还可以隐藏容器 div 并执行 .load 来加载 html,然后在回调中淡入。

所以试试这个:

wrapper = $('<div class="wrapper">')
$("body").append(wrapper)
$(wrapper).hide().html(data).show();

由于某种原因,就数据而言,它没有从 jsfiddle 获得任何东西。所以,我也只是在其中添加一些文字。
http://jsfiddle.net/G9Sa3/

Yea you need to do this on the callback function, you will get your data and then do fadein. But you may need to hide the content first before you fade it in. You could also hide a container div and do .load to load the html and then fadein on the callback.

So try this:

wrapper = $('<div class="wrapper">')
$("body").append(wrapper)
$(wrapper).hide().html(data).show();

For some reason it's not getting anything from jsfiddle, as far as data goes. So, i just add some text in there as well.
http://jsfiddle.net/G9Sa3/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文