2012-10-31 5 views
1

Я хочу иметь 4-8 «скрытых» divs на странице. Затем также есть 2 кнопки, один «плюс» и один «удалить». Когда я нажимаю кнопку «плюс», он показывает первый div, и если я снова нажимаю кнопку «плюс», он показывает div nr 2. И если я использую «remove», он удаляет div.показать/скрыть divs jQuery

Должен ли я использовать условные заявления или есть ли какое-либо простое решение?

$(document).ready(function() { 
$('#show').click(function() { 
    $("#hiddencontent").fadeIn("slow"); 
    }); 
}); 
+2

Вы можете создать скрипку для сценария –

+0

Это полностью зависит от структуры документа, который вы не размещаете здесь –

+0

Вот скрипка , http: //jsfiddle.net/Mangomeat/SfTyG/ –

ответ

0

ID «s уникальны, вы не можете использовать их снова и снова, изменить id="hiddencontent" к class="hiddencontent" затем следуют ниже.

Demo jsFiddle

$(document).ready(function() { 
    var index = 0; 
    $('#show').click(function() { 
     $('div').eq(index).fadeIn('slow'); 
     if(index < $('div').length){ 
      index++; 
     }else{ 
      alert('There is no more hidden content!'); 
     } 
    }); 
    $('#remove').click(function(){ 
     $('div').eq(index -1).remove(); 
    }); 
});​ 

JQuery-х .eq() имеет zero based index. Мы устанавливаем переменную вне функции щелчка, но все еще доступны для области щелчка, и мы последовательно переключаем hiddencontent. Когда мы нажмем, он изменит индекс с 0 > 1 > 2 > 3 и так далее. Мы проверяем, меньше ли индекс меньше текущего количества элементов, соответствующих классу hiddencontent, и если он проходит, мы перебираем индекс в следующее целое число.

Функция удаления не требует изменения итератора, так как она только хочет удалить последний индексированный элемент (насколько я могу судить по вашему сценарию).

Это должно быть сделано.

2

Следующий код покажет первый div с дисплеем none.

$(document).ready(function() { 
     $('#show').click(function() {  
      $("div").filter(function() { 
       return $(this).css("display") == "none" 
      }).first().show(); 
     }); 

Скрыть последние показанные div.

 $('#remove').click(function() { 
      $("div").filter(function() { 
       return $(this).css("display") !== "none" 
      }).last().hide(); 
     }); 
    }); 
+2

My Я предлагаю jQuery '.first()' и '.last()' вместо использования '[]' для ссылок на элементы? –

+0

@RocketHazmat, Thanks – Anoop

3

Вы можете, вероятно, попробовать что-то вроде

$("div:hidden").first().show(); 

и

$("div:visible").last().hide(); 
2

Дайте DIVS общий класс для простоты выбора, а затем вы можете сделать это:

var $divs = $(".hideShow").hide(); // cache a reference to the relevant divs, 
            // and start with them hidden 
$("#show").click(function() { 
    $divs.filter(":hidden").first().fadeIn(); 
}); 
$("#hide").click(function() { 
    $divs.not(":hidden").last().fadeOut(); 
});​ 

Demo : http://jsfiddle.net/ua9ef/2/

:hidden selector позволяет вам манипулировать только скрытыми или просто скрытыми скрытыми .not(). (Или, конечно, вы можете использовать :visible selector ...)

+0

Bravo! очень приятно –

+0

Отличный материал! только одна проблема .. Кнопки взаимодействуют с кнопкой отправки в форме контакта, http://libra-frisk.com/uberMenuTest/?page_id=84 –

+0

@MaggyTanky - Извините, я не знаю, что вы имеете в виду: на странице на другом конце этой линии, похоже, отлично работает без взаимодействия кнопок. Код, который я показал, привязывает события кликов к кнопкам с определенными идентификаторами, а затем скрывает или показывает div, которые имеют определенный класс, поэтому я не вижу, как может быть взаимодействие с другой кнопкой. – nnnnnn

0

http://jsfiddle.net/z9s8T/

CSS

div{ 
    display:none; 
} 
div.show{ 
    display:block; 
} 
​ 

HTML

<button id="show">show</button> 
<button id="hide">hide</button> 

<div>1</div> 
<div>2</div> 
<div>3</div> 
<div>4</div> 

JS

$(function(){ 
    $('#show').click(function(){ 
     $('div:not(.show):eq(0)').addClass('show'); 
    }); 
    $('#hide').click(function(){ 
     $('div.show:last').removeClass('show'); 
    }); 
});​ 
0

Вот простой fiddle используя класс .hidden (плохое имя) для элементов, которые будут скрыты, обнаружены и скрыты снова. Затем я использую селектора :hidden и :visible.

$("#add").click(function() { 
    $(".hidden:hidden").first().show(); 
}); 

$("#remove").click(function() { 
    $(".hidden:visible").last().hide(); 
}); 
+0

Отличный материал yeah thanx !! –

0

Проверить это

var index = -1; 
var max = $('.container > div').length; 
$('#show').on('click', function() { 
    if (index + 1 > max) { 
     // Do Nothing 
    } else { 
     if (index < max - 1) { 
      index++; 
      $('.container > div:eq(' + index + ')').show(); 
     } 


    } 
}); 

$('#hide').on('click', function() { 
    if (index == -1) { 
     index = 0; 
    } 
    else { 
     if ($('.container > div:eq(' + index + ')').is(':visible')) { 
      $('.container > div:eq(' + index + ')').hide(); 
      index--; 
     } 
    } 
});​ 

Check Fiddle

+0

Отличный материал! Но он взаимодействует с кнопкой отправки в контактной форме. Как я могу это решить? http://libra-frisk.com/uberMenuTest/?page_id=84#wpcf7-f125-p84-o1 –

+0

Заменить if (index == -1) { index = 0; } с if (index == -1) { index = -1; } –

+0

И что именно происходит здесь. Вы отправляете форму при нажатии кнопки –