【问题标题】:execute callback even if jquery statement fails即使 jquery 语句失败也执行回调
【发布时间】:2011-07-18 14:41:47
【问题描述】:

我有一个jquery语句如下:

$('.panel.col2, .panel.col3').fadeOut('fast', function(){
    //SOME CODE
});

问题是这些元素并不总是存在,无论回调所属的语句是否成功,我都需要它来执行回调。有什么解决方法吗?

【问题讨论】:

  • 听起来那不是真的回调?
  • 关键是它需要在元素被移除之后执行。

标签: jquery callback execution


【解决方案1】:

试试这样的:

function myCallback(){
   //SOME CODE
}

if($('.panel.col2, .panel.col3').length>0){

   $('.panel.col2, .panel.col3').fadeOut('fast', function(){
       myCallback();
   });
} else {
   myCallback();
}

【讨论】:

  • 这更有条理。这就是为什么我选择它作为答案。
  • @sightofnick ...这实际上效率较低,因为在同一个代码块中多次使用同一个 jQuery 选择器会导致额外的循环。将 jQuery 对象简单地存储在一个变量中然后使用该变量会更有效。示例: var mypanelelement = $('.panel.col2, .panel.col3');现在您可以使用变量 mypanelelement 而不是强制 jQuery 再次搜索该元素。
  • @John Hartsock:您当然是对的,但我也发现了您的代码中的弱点——您仅在加载文档时才定义函数,并且此代码可以更早地加载。当然取决于函数内代码的复杂性。无论如何,它是在表演中踢球。附言是的,我应该把其他所有东西都包装在准备好的文件中。我知道:)。
【解决方案2】:

听起来您希望在fadeOut 的回调中运行一些代码,如果它们没有淡出的元素,则在外部运行。这是一个想法,但我不知道您要做什么。

$(document).ready (function () {
  var panelElement = $('.panel.col2, .panel.col3');
  var fadeOutCallBack = function(){
    //SOME CODE
  };
  panelElement.fadeOut('fast', fadeOutCallBack);
  if (panelElement.length == 0) {
    fadeOutCallBack();
  }
});

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2019-05-20
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多