jquery:整个类的一个单独的回调,无论它包含多少元素

时间:2011-04-27 09:05:48

标签: jquery class callback repeat

我很确定这个问题已经被问到了(但我找不到解决方案)。

我的问题是,回调重复了它对于类的每个元素的工作。例如:

$('a').click(function() {
    var id = $(this).attr('rel');
    $('.jsForm').not('#'+id).slideUp('slow', function() {
        $('#'+id).slideToggle('slow');
    });
});

类jsForm应用于3个不同的div元素,它们都具有唯一的id。 id来自rel属性中的a-tag。

这段代码的目的是除了点击了id之外的所有div元素都向上滑动。在其他div滑落之后,主要的div应该切换。

但如果我有3个div,则回调函数被调用2次并且它会切换两次。

是否有可能避免类的每个元素都获得自己的回调函数?整个班级的一个回调函数对我来说没问题。

我希望你能理解我的问题。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用计数器仅在最后一张幻灯片之后执行:

$('a').click(function() {
    var id = $(this).attr('rel');
    var size = $('.jsForm').length - 1;
    var count = 0;
    $('.jsForm').not('#'+id).slideUp('slow', function() {
        if (++count == size) {
          $('#'+id).slideToggle('slow');
        }
    });
});

答案 1 :(得分:0)

你可以做一些这样的事情,你在那里检查你已达到所需状态的回调。例如,这里只能看到一个jsForm。

$('a').click(function() {
    var id = $(this).attr('rel');
    $('.jsForm').not('#'+id).slideUp('slow', function() {
        if($('.jsForm:visible').length == 1){
          $('#'+id).slideToggle('slow');
        }
    });
});