【问题标题】:JQuery FadeIn does not work in Ajax Success when page first loaded首次加载页面时,JQuery FadeIn 在 Ajax Success 中不起作用
【发布时间】:2016-09-10 03:44:02
【问题描述】:

第一次加载页面时,第一次调用 Ajax 时,FadeIn 在我的成功函数中不起作用。其他 Jquery 函数确实有效,但确实有效,即 AddClass、HTML、Delay、Hide。然而,一旦页面被加载,任何后续的 Ajax 调用 FadeIn 都可以工作……也就是说,直到页面被刷新,当 FadeIn 再次第一次不工作时。我究竟做错了什么 ?谢谢 !

HTML

<div class="updated_comment"></div>

<button type="button" id="update_comment" class="btn btn-primary">ONLY Update Comments</button>

JQuery:

    $("#update_comment").click(function () {
    event.preventDefault();
    var comment = $(".edit_comment").val();
    var $id = $("#reference").val();
    $.ajax({
        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
        type: "POST",
        url: 'update_comment/'+$id,
        data: {edit_comment:comment},
        success: function () {

            $(".updated_comment").addClass("alert alert-success");
             $(".updated_comment").html("The Comment Has Been Updated").fadeIn(1000).delay(1000).hide(2000);
        },
        error: function () {
            alert('there has been a system level error - please contact support')
        }
    });
});

【问题讨论】:

  • 是否有任何 CSS 应用于 .updated_comment 会影响其显示、高度等?
  • 淡入并再次隐藏...fadeIn(1000).delay(1000).hide(2000)??
  • @BrianGlaz 在显示之后或之前没有添加 css。
  • 你在哪里设置了 id #update_comment ?具有该 id 的元素在哪里?我想知道为什么点击后会发生任何事情。
  • @EdwardBlack 不,它没有。它是一个变量名,所以它可以是任何东西。大多数时候,开发人员在前面使用$ 只是为了知道它是一个jquery 对象(虽然在这种情况下不是:)),就是这样。没有区别。这取决于意见,要不要在前面放一个都没关系

标签: jquery


【解决方案1】:

我认为您必须在文档加载时触发点击功能。由于我们所有的效果都发生在点击事件中,因此它在页面加载时不起作用,除非您触发点击

在上述函数之前/之后将其添加到您的就绪函数中:

 $("#update_comment").trigger('click');

或在注册事件后立即调用 click 函数。

 $("#update_comment").click(function () {
    event.preventDefault();
    ......
  }).click();

【讨论】:

  • 我按照您的要求做了,尝试了这两种方法,在这两种情况下,警报都会在点击任何按钮之前页面加载的那一刻触发。
  • 所以问题是即使您从未按下按钮,您的 ajax 也会被触发?然后调用错误回调函数?
  • @Vince 好的,等等。您希望淡入仅在单击按钮或首次加载文档时起作用?
  • @bipen 我只希望在单击 #update_comment btn 并且 Ajax 调用成功时淡入工作。我不希望淡入在第一页加载时起作用。
  • 好吧废话,那么我的答案全错了。 :):) ...无论如何,这越来越有趣了。所以你的意思是说当你点击按钮时(第一次),淡入不起作用?
【解决方案2】:

调用文档准备好的代码。 您可以使用setTimeout 解决fadeIn -> delay -> fadeOut。

您还缺少alert 之后的分号。

HTML

<div class="updated_comment"></div>

JQuery:

$(document).ready(function(){

        $("#update_comment").click(function () {
        event.preventDefault();
        var comment = $(".edit_comment").val();
        var $id = $("#reference").val();
        $.ajax({
            headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
            type: "POST",
            url: 'update_comment/'+$id,
            data: {edit_comment:comment},
            success: function () {

                $(".updated_comment").addClass("alert alert-success");

                 $(".updated_comment").html("The Comment Has Been Updated");
                 $(".updated_comment").fadeIn(1000);

                 setTimeout(function(){
                     $(".updated_comment").fadeOut(1000);
                 },1000);
            },
            error: function () {
                alert('there has been a system level error - please contact support');
            }
        });
    });
});

【讨论】:

  • 非常感谢!但是,我得到相同的结果。当页面第一次加载时,没有淡入。然后后续的 Ajax 调用工作得很好。
  • 我的 Ajax 调用保存在一个单独的文件中,上面有一个 $(document).ready。
  • 我认为问题出在您代码中的其他地方,在您没有显示的部分中。
  • $id 上的 $ 无关紧要,对代码没有影响。这是我在创建 var 时从教程书中遵循的约定。
  • 有没有可能是因为alert后面少了一个分号,导致代码不工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多