2013-09-05 2 views
0

Код:Как я могу использовать одну и ту же функцию JQuery для 18 разных классов?

<script> 
$(document).ready(function() { 

    $('.boxes').on('click', function(e){ 
    e.preventDefault(); 
    var $btn = $(this); 
    $btn.toggleClass('opened'); 

    var heights = $btn.hasClass('opened') ? 300 : 100 ; 
    $('.boxes').stop().animate({height: heights }); 
    }); 
}); 
    </script> 

У меня есть 18 коробок, которые имеют класс boxes. Как вы можете себе представить, нажав .boxes, откроется и закрывается все 18 ящиков. То, что я хочу сделать, это убедиться, что только окно, которое нажато, открывается и закрывается, а не все из них. 18 ящиков имеют уникальные идентификаторы, такие как box1, box2, box3 и т. Д.

Я новичок в JS, поэтому для меня логическое решение будет повторять вышеуказанный код 18 раз и использовать уникальный идентификатор для ящиков, но я знаю, что это слишком много повторений кода. Итак, как я могу убедиться, что только щелчок, который открывается, - это тот, который открывается и закрывается, а не все из них? Любой совет будет полезен. Благодаря!

+1

Вы можете использовать '$ (this)', как вы уже делали. Итак, '$ btn.stop(). Animate();' должен делать трюк. – insertusernamehere

+0

На самом деле вам кажется, что вам, возможно, нужно прочитать некоторые базовые учебники. – user2736012

+0

@ user2736012 Какие ресурсы я могу использовать для решения таких вещей? – starbucks

ответ

1

EDIT: Дайте ему попробовать.

$(".boxes").on('click', function(e) { 
    e.preventDefault(); 
    $(this).toggleClass('opened'); 
    var heights = $(this).hasClass('opened') ? 300 : 100 ; 

    $(this).stop().animate({height: heights}); //Show clicked box 
}); 

JSFiddle

+0

Я не хочу скрывать все коробки. Ящики могут оставаться там, но только окно, которое нужно щелкнуть, должно открываться и закрываться. – starbucks

+0

Вы пропустили использование '$ btn' ... Это будет неопределенным, если вы задаете высоту var. – jlars62

+0

Я использовал вашу отредактированную версию, и она по-прежнему выполняла выборку. – starbucks

1

Разве вы не можете изменить $('.boxes') на $btn? Это будет анимировать только поле, которое будет нажато.

$btn.stop().animate({height: heights }); 
^^^^ 
+0

Спасибо! Но если я использую это, когда окно открывается и закрывается, по какой-то причине оно оставляет огромное пустое пространство. – starbucks

+0

Можете ли вы создать скрипку для нас? http://jsfiddle.net/ – jlars62

0

изменения $('.boxes').stop().animate({height: heights }); в

$(this).stop().animate({height: heights }); 

будет переключаться только выбранные окна. Посмотрите скрипку http://jsfiddle.net/xSNYc/

Смежные вопросы