【问题标题】:Using jquery's .queue to queue functions使用 jquery 的 .queue 对函数进行排队
【发布时间】:2010-11-15 15:44:10
【问题描述】:

当我从 .queue() 函数中删除参数“ajax”时,我的 ajax 调用确实会排队。唯一的问题是,jQuery 文档说 .queue() 函数将默认为“fx”队列。不幸的是,我已经在使用这个队列(用于效果)并且我想使用另一个专门用于自定义功能的队列。不幸的是,.queue() 函数中的代码永远不会被调用。我在下面有一个我的代码示例(只是一个小的 sn-p)。如果您还有其他问题,请随时发表评论,这会变得有点复杂。

$(document).ready(function(event) {

var target = event.target;
var ajaxify = new Ajaxify();

$.each(ajaxify.functions, function(index, value){

     if ($(target).hasClass(value)) {        
       console.log('this is in my console, and nowhere else in my code');
       $('#main').queue('customfunctions', function (next) {
         var self = this;          
         ajaxify[value](target, event, next, self);       
       });

     }

   });
  $('#main').dequeue('customfunctions');
});

function Ajaxify() {

  this.functions = [
                   'ajaxify_overlay',
                   'ajaxify_overlayCancel',
                   'ajaxify_overlaySubmit',
                   'ajaxify_rollout',
                   'ajaxify_rolloutCancel',
                   'ajaxify_rolloutSubmit',
                   'ajaxify_upload',
                   'ajaxify_contentArea',
                   'ajaxify_itemToggler',
                   'ajaxify_closer',
                   'ajaxify_submit',
                   'ajaxify_inputActivate',
                   'ajaxify_executeAndRefresh',
                   'ajaxify_empty' //no comma on the last entry!!!!  
                 ];

}

Ajaxify.prototype.ajaxify_executeAndRefresh = function (target, event, next, self) {

  event.preventDefault();

  var newPath = getVar($(target).attr('class'), 'url'); //getVar function not included, it will get the new path for the ajax call below

  var url = $(target).attr('href');

  $.ajax({    
    type: "POST",
    url: url,
    success: function(transport) {

      refreshPage(newPath); //refreshPage function not included, it will do a page refresh with the new path

      next();     

    }
  });

}

【问题讨论】:

    标签: javascript jquery queue


    【解决方案1】:

    您需要调用dequeue() 来运行队列中的下一个函数。

    【讨论】:

    • @SLaks:添加 .dequeue() 似乎无法解决此问题。我正在更新上面的代码以反映我添加的 .dequeue
    • @bmarti:但是,它没有做任何有用的事情。它只是立即调用每个函数。你应该弄清楚何时出队。
    • @SLaks: 我把 $(self).dequeue('customfunctions');在我的 ajax 调用的成功回调中。我更改了上面的代码以反映这些更改。但它似乎仍然无法正常工作。
    • @bmarti:您从未启动过初始项目。
    • @SLaks:您所说的“从不启动初始项目”是什么意思?我在上面的代码中添加了一个 console.log(),这显示在我的 js 控制台中。顺便说一句,感谢您对此的帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2019-05-31
    • 2013-07-24
    • 2014-08-20
    相关资源
    最近更新 更多