2

我正在尝试修改一个 Jquery 插件来修复错误。

以下是所有关联在一起的代码:

$('.' + settings.activeClass).live('click', function(){
    select(this);
    alert( $('#pg li.selected').height() );
    .......
});

function select(el){
hideSelected(function(){
    $(el).addClass('selected').removeClass('active');
    $(el).animate(settings.selectedCSS, 'slow');

});
}

因此,在添加“选定”类之前,高度约为 116px

$(el).addClass('selected').removeClass('active');

添加'selected'类后,高度应该是大约378px,显示在呈现的html页面上,高度更新为378px

alert( $('#pg li.selected').height() );

但是,当我尝试打印高度的值时,它仍然捕获了添加“选定”类之前的旧值。

这是奇怪的部分,我添加了警告框以在添加“选定”类之后打印高度值,它应该获取高度的新值,但显然不是。

所以,我想到了一个解决方案,也许 JQuery 在点击事件后有某种事件?或任何替代解决方案?

4

1 回答 1

1

您的动画将执行警报的异步。您需要处理您希望在动画回调中实现的任何内容:

http://api.jquery.com/animate/

就像:

$('.' + settings.activeClass).live('click', function(){
  select(this);
  // NOT HERE alert( $('#pg li.selected').height() );
  .......
});

function select(el){
  hideSelected(function(){
    $(el).addClass('selected').removeClass('active');
    $(el).animate(settings.selectedCSS, 'slow', function(){
      //here
      alert( $('#pg li.selected').height() );
    });
  });
}

编辑:正如我的评论中提到的,您还可以选择传递一个布尔参数来告诉动画函数处理异步或同步:

动画 API:http ://api.jquery.com/animate/

与处理队列相关的具体文本:

.animate( properties, options ) *properties :动画将向其移动的 CSS 属性映射。options 传递给方法的附加选项的映射。

支持的键:

  1. 持续时间:确定动画将运行多长时间的字符串或数字。
  2. easing:一个字符串,指示用于过渡的缓动函数。
  3. 完成:动画完成后调用的函数。step:动画的每一步之后要调用的函数。
  4. queue:一个布尔值,指示是否将动画放入效果队列。如果为 false,动画将立即开始。从 jQuery 1.7 开始, queue 选项也可以接受一个字符串,在这种情况下,动画被添加到由该字符串表示的队列中。

  5. specialEasing:由 properties 参数定义的一个或多个 CSS 属性及其相应的缓动函数的映射(添加 1.4)。

* -直接取自 jquery.com 的文本 - 保留所有权利 jquery

于 2012-04-05T18:36:08.520 回答