【问题标题】:Ajax needs one more click to loadAjax 需要一键加载
【发布时间】:2012-10-05 10:30:06
【问题描述】:

我对 AJAX 和 Jquery 有疑问 经过数小时的研究,我终于在这里发布。

你可以看到我的问题directly on my (nonfinished) website

当你到达页面时,Accueil 上什么都没有(这很正常)

试一试

点击项目 =>

  • 触发器标头(正常)

  • 发送 Ajax 请求以将项目页面加载到主 div 中(正常)

  • ('li') 不会开始向下滑动(除非我在 Project 上再次单击

试试 2

Go to A Propos =>(一切正常)Go to Project again =>

  • 触发一切!

代码

这里是用于触发项目下滑的代码:

$('li').livequery(function(){

    var lis = $('#project-container ul').find('li');
    $(lis).each(function(index) {
        var li = $(this);

        setTimeout(function() {
            li.slideDown(400);
        }, 300 * index);
    }); 
});

我觉得和this question是一样的问题

这一定是一个回调故事,其中 var 没有正确存储或什么的 但不幸的是,我无法让它与我的页面一起使用。

有人可以帮我吗?

【问题讨论】:

    标签: javascript jquery ajax asynchronous


    【解决方案1】:

    确保在页面加载后运行此代码。当我在 90% 的情况下遇到这种问题时,这就是原因。

    【讨论】:

    • $(document).ready(function{ ..your code... });封装你的代码,你可以在documentation找到它。我认为这不是问题所在,但最好还是这样做
    【解决方案2】:

    我不是 livequery 的忠实粉丝(我认为使用默认的 .on() 方法没有任何优势。(delegated ofc)。

    对我来说,这似乎是一个过时的库 :)

    另一个提示。使用参数调用正确的方法,而不是全局定义东西。如果您像这样定义全局的所有内容,您将看不到什么时候发生了什么变化以及发生了什么变化。

    使用三等号===!== 进行比较。而不是==,它将避免意外的误报。

    function GoToLink () { if (WrapLink == 1) { 中,您将表示可以调用js 函数的url 的字符串与1 进行比较。为什么?

    你为什么不调用ajax方法来避免更改window.location

    为什么你需要一个额外的 ajax 库,因为你使用 jquery 你可以只使用jquery's default ajax implemention

    $.ajax({
       type: "POST",
       url: "some.php",
       data: "name=John&location=Boston",
       success: function(msg){
         alert( "Data Saved: " + msg );
       }
     });
    

    只需几个想法就能让你走上正轨

    更新:

    documentation 中描述了 on 方法的使用,您应该委托使用它,这意味着您将它应用到父容器并给子容器。

    $('ul').on('click', 'li', function(){ //做点什么 });

    我在没有传递事件的情况下忽略了功能。

    $('li').livequery(function () {
        var lis = $('#project-container ul').find('li');
        $(lis).each(function (index) {
            var li = $(this);
    
            setTimeout(function () {
                li.slideDown(400);
            }, 300 * index);
        });
    });
    

    这里最简单的方法是使用方法并在添加列表项时调用它。

     function slideDownListitems($lis){
         $lis.each(function (i) {  
            setTimeout(function () {
                $(this).slideDown(400);
            }, 300 * i);
        });
     }
     //when a listitem is added call
     slideDownListitems( $('#project-container ul li') );
    

    JS 一周干得漂亮!稍后我将更深入地研究其余部分,并为您提供更新(正在工作)grtz

    【讨论】:

    • 嘿VDP,首先感谢您的回答和您查看我的代码。我是 Jquery 和 Ajax 的新手(自 1 周以来一直在做这一切)所以我有几个问题:如何使用 .on() 而不是 livequery?//你的意思是:调用正确的方法? //确定比较//在函数 GoToLink() => 我做了这个东西来比较 WrapLink 的旧值和新值。这样,如果用户再次单击同一链接,它可以避免页面重新加载。//为什么我不使用 ajax... 因为 window.location 是我遇到的第一个解决方案。谢谢你的一切!
    • 感谢您的一切!你真的很酷!感谢您的称赞,我正在尝试修改我的功能,但看起来更复杂^^
    • 顺便说一句,我一直在测试 ajax 调用,修改后的滑动功能,但我无法让它们工作:(
    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    相关资源
    最近更新 更多