2013-11-01 2 views
0

Очень новый для jQuery, пожалуйста, несите меня. У меня есть форма с повторяющимися полями, которые я хочу показывать по одному при нажатии пользователем кнопки . Вот основная схема:Показать следующий div один за раз, используя одну кнопку - jQuery

<form> 
    <fieldset> 
     <input 1> 
     <input 2> 
     <div id="address-container"> 
      <fieldset> <!-- current address --> 
       <input 3> 
       <input 4> 
      </fieldset> 
      <div id ="previous-address-1" class="hidden"> 
      <fieldset> 
       <input 5> 
       <input 6>   
      </fieldset> 
      </div> 
      <div id ="previous-address-2" class="hidden"> 
      <fieldset> 
       <input 5> 
       <input 6>   
      </fieldset> 
      </div> 
      <div id ="previous-address-3" class="hidden"> 
      <fieldset> 
       <input 5> 
       <input 6>   
      </fieldset> 
      </div> 
     </div> <!-- close address-container --> 
    <span class="button"><a href="#" id="show-hidden">Add a Previous Address</a></span> 
    </fieldset> 
</form> 

я могу получить все .hidden-ДИВ, чтобы показать сразу после щелчка, но я пытаюсь выполнить показывать их по одному за раз, с пользователем, нажав еще раз, чтобы добавить еще вложенный набор полей в случае необходимости. Я понимаю, что я мог добавить больше кнопок и прикрепить к каждому id, а затем скрыть их, как только они будут нажаты, но кажется, что должен быть менее подробный способ использования next() и/или eq().

С другой стороны, возможно, добавление будет лучшим маршрутом?

Любая помощь очень ценится.

+0

YOu нужен слайдер Google это первый –

+0

Определенно не нужен слайдер. Я хочу, чтобы скрытые объекты оставались видимыми в DOM после показа. Спасибо за быстрый ответ. –

+0

см. Мой ответ –

ответ

0

Да, вы правы. Вы можете использовать eq в вашем селекторе.

$('#show-hidden').click(function(event){ 
    event.preventDefault(); 

    $('#address-container .hidden:eq(0)').removeClass('hidden'); 
}); 

Пример: http://jsbin.com/aMuHAhe/1/edit

Update: Скрыть ссылку после того, как все показаны

$('#show-hidden').click(function(event){ 
    event.preventDefault(); 

    $('#address-container .hidden:eq(0)').removeClass('hidden'); 

    if($('#address-container .hidden').length == 0){ 
     $(this).hide(); 
    } 
}); 

Это проверяет, есть ли какие-либо элементы внутри # адресном-контейнера, которые имеют скрытый класс , Если ничего не найдено, .length будет 0. $ (this) является # show-hidden ссылкой.

+0

Эта скрипка показывает точно, что я пытаюсь сделать, но у меня возникли проблемы с ее внедрением в мою форму. Будет ли другой div, окружающий всю форму, вызвать проблему с селектором, как вы его показали? –

+0

Нет, они не должны, если у вас нет ничего другого, используя один и тот же идентификатор. Селектор находит элемент с id = "address-container", а затем внутри него находит все элементы с классом = "hidden", но выбирает только первый. Если вы хотите показать больше кода или ссылку, возможно, я увижу что-то еще. – AndrewR

+0

Если вы не против, посмотрите ..... http://jsbin.com/ABIKiXU/1/edit –

0

Попробуйте это,

$('.button').on('click',function(){ 
    var elem= $('.hidden:first'); 
    if($('.show').length) 
    { 
     elem=$('.show').next('div.hidden'); 
     $('.show').removeClass('show'); 
    } 
    elem.addClass('show'); 
    return false;// to prevent for submit 
}); 

Demo

+0

Спасибо за быстрый ответ! Где мне нужно вставить класс .show в мой пример, чтобы сделать эту работу? –

+0

@NolanLawrence Скопируйте мой код –

+0

Спасибо за ваше решение, я пошел с немного более элегантным исправлением AndrewR. Престижность! –

0
$(function(){ 
var i = 0; 
$("#show-hidden").click(function(ev){ 
ev.preventDefault(); 

var j = (i%3)+ 1; 


$("#previous-address-"+j).removeClass('hidden'); 

$("#address-container").find("div").not(document.getElementById("previous-address-"+j)).addClass('hidden'); 

i++; 
}); 


}); 

Здесь я объявила глобальную переменную i=0. Каждый раз, когда на ссылку нажимается значение j циклов между 1 2 и 3, как 1,2,3,1,2,3 ..... И содержимое div с id, вычисленным из j, показано, пока другие скрыты.

Demo

+0

Спасибо за ваше решение, я закончил с AndrewR, так как он был более кратким. –

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