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

发布于 2024-11-03 13:41:10 字数 526 浏览 1 评论 0原文

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

我的问题是,回调会为类的每个元素重复它的工作。示例:

$('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 次,并且会切换两次。

是否有可能避免类的每个元素都有自己的回调函数?整个类的一个回调函数对我来说就很好了。

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

i'm pretty sure that this question has allready been asked (but i didn't find the solution).

Well my problem is, that the callback repeats it's job for every element of a class. example:

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

the class jsForm is applied to 3 different div elements which all have a unique id. The id comes from a-tag in the rel attribute.

the aim of this code is that all the div elements apart from the one with the clicked id are sliding up. After the other divs slided up, the main div should toggle.

But if I have 3 divs, the callback functions is called 2 times and it toggles twice.

is there a possibility to avoid that every element of a class gets a own callback function? One callback functions for the whole class would be fine for me.

i hope you can understand my question. thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挖个坑埋了你 2024-11-10 13:41:10

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

$('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');
        }
    });
});

You could use a counter to execute only after the last slide:

$('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');
        }
    });
});
对你的占有欲 2024-11-10 13:41:10

您可以执行类似的操作,在回调中检查是否已达到所需状态。例如,这里只有一个 jsForm 可见。

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

You could do something like this where you check in the callback that you have reached the desired state. Here for example only one jsForm is visible.

$('a').click(function() {
    var id = $(this).attr('rel');
    $('.jsForm').not('#'+id).slideUp('slow', function() {
        if($('.jsForm:visible').length == 1){
          $('#'+id).slideToggle('slow');
        }
    });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文