【问题标题】:Can't use ajax POST and jquery animation simultaneously (using Bootstrap)不能同时使用 ajax POST 和 jquery 动画(使用 Bootstrap)
【发布时间】:2019-02-04 11:45:05
【问题描述】:

我正在使用带有侧边栏的Bootstrap Template,当用户点击.nav-menu(或模板中的公司名称)时,侧边栏会隐藏/取消隐藏。

$(document).ready(function () {

    $( '.nav-menu' ).click(function() {
         event.preventDefault();
         if($( '.nav-menu-item' ).is(":visible")){
              $('.nav-menu-item' ).hide('slide', {direction:'left'}, 1000);
              $('#menu-item-container').addClass('sidebar-hidden');
         } else{
              $('.nav-menu-item' ).show('slide', {direction:'left'}, 1000);
              $('#menu-item-container').removeClass('sidebar-hidden');  
         }
    });
});

上面的代码运行良好。

当我尝试包含如下的 ajax 帖子时,问题就出现了:

$(document).ready(function () {

    $( '.nav-menu' ).click(function() {
         event.preventDefault();
         if($( '.nav-menu-item' ).is(":visible")){
              $('.nav-menu-item' ).hide('slide', {direction:'left'}, 1000);
              $('#menu-item-container').addClass('sidebar-hidden');

              $.ajax({
                url:'/userSettings',
                type:'POST',
                data:{'sidebar':'0'}
              });


         } else{
              $('.nav-menu-item' ).show('slide', {direction:'left'}, 1000);
              $('#menu-item-container').removeClass('sidebar-hidden'); 

              $.ajax({
                url:'/userSettings',
                type:'POST',
                data:{'sidebar':'1'}
              });

         }
    });
});

我在 public/js 文件夹中添加了this 并将以下内容添加到页脚:

<script type="text/javascript" src="js/jquery-3.3.1.js"></script>

现在 ajax POST 工作正常(除了我必须双击 .nav-menu),但显示/隐藏动画不能正常工作!

$('.nav-menu-item' ).hide('slide', {direction:'left'}, 1000);部分代码根本不起作用!

这是 Chrome 控制台中的错误(有 7270 个):

jquery-3.3.1.js:6710 Uncaught TypeError: jQuery.easing[this.easing] is not a function
    at init.run (jquery-3.3.1.js:6710)
    at tick (jquery-3.3.1.js:7094)
    at Function.jQuery.fx.tick (jquery-3.3.1.js:7436)
    at schedule (jquery-3.3.1.js:6813)

不确定这是否相关,但这是整个页脚:

//bootstrap required
<script src="https://cdnjs.cloudflare.com/ajax/libs/feather-icons/4.9.0/feather.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
//bootstrap required

<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script src="js/dashboard.js"></script>
<script src="js/jquery.js"></script>
</body>
</html>

【问题讨论】:

  • api.jquery.com/hide 表明带有 3 个参数的 hide 的签名是 hide( duration, easing, complete) 其中 easing 和 complete 是函数。您正在传递三个参数。第一个只是由 jQuery 处理的后备,但第二个,缓动,期待一个函数并且你已经传递了一个对象。
  • .hide() 中删除'slide', {direction:'left'}, 1000 修复了它!在添加 ajax 之前,我完全不知道为什么它工作正常??
  • 另外,如果您发布答案,我会接受。

标签: javascript jquery node.js ajax bootstrap-4


【解决方案1】:

jQuery hide() documentation 表明带有 3 个参数的 hide 的签名是 hide(duration, easing, complete),其中 easing 和 complete 是函数。您正在传递三个参数。第一个只是由 jQuery 通过回退处理,但第二个,缓动,期待一个函数并且你已经传递了一个对象。

也许它似乎只是在添加 ajax 代码之前才起作用。也许您当时也遇到了错误,但它们并没有阻止其他代码运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2020-05-26
    • 2014-05-16
    • 2015-01-06
    • 2011-12-18
    相关资源
    最近更新 更多