2012-11-29 2 views
0

Пожалуйста, помогите! Я пытался выяснить, как закрыть конкретный DIV, когда он уже открыт.hide/show toggle divs

Например, пожалуйста, смотрите: http://jsfiddle.net/WGRvw/

Если я нажимаю на до н.э. должен появиться DIV, но если я нажимаю на него снова, DIV должен исчезнуть, но я не могу понять, как сделать его исчезнуть , Кроме того, я хочу, чтобы только один DIV появлялся за раз.

Я пытался делать еще:

  $(function(){ 
      $(document).ready(function() { 
       $(".prov").click(function(){ 
        $(".clearfix").hide(); 
       }); 
   $('#BC').hide(); 
       $('#BC-show').click(function() { 
        if($('#BC').toggle('slow')) { 
         return false; 

        } 
        else { 
         $('#BC').hide(); 
        } 
       }); 
       $('#AB').hide(); 
       $('#AB-show').click(function() { 
        if($('#AB').toggle('slow')) { 
         return false; 

        } 
        else { 
         $('#AB').hide(); 
        } 
       }); 
       }); 
      }); 

    }); 

Ваша помощь ценится.

Спасибо!

+1

Исправлено: http://jsfiddle.net/WGRvw/141/ – ilivewithian

ответ

3

Кажется, что у вас есть два события для каждого элемента.

Один использование Classname Другого использования ID

Попробуйте этот код

$(function() { 
    $(document).ready(function() { 
     $('#BC, #AB').hide(); 

     $(".prov").click(function() { 
      var id = $(this).attr('id').split('-')[0]; 
      $('.clearfix').not('#'+id).hide(); 
      $('#' + id).toggle('slow'); 
      return false; 
     }); 
    }); 
});​ 

Check Fiddle

Просто прикрепить событие, используя класс и получить идентификатор от него и используйте его для переключения.

+0

Спасибо! Это работает правильно ... Тем не менее, я хочу, чтобы один div появлялся за раз. – user1652920

+0

конечно. Если это так, добавьте это в свой код .. $ ('. Clearfix'). Not ('#' + id) .hide(); .. Проверьте обновленный код –

+0

Фантастический. Ты восхитителен! Спасибо! – user1652920

0

Похоже, что ваш первый обработчик событий скрывает элемент, а затем вызывается переключение. Таким образом, toggle показывает элемент, поскольку $(".prov").click(function(){ $(".clearfix").hide(); }); скрывает его.

1

Что произойдет, если вы нажмете ссылку на шоу, это то, что divs спрятаны и вы вызываете toggle, который в основном показывает div снова каждый раз. Поэтому желаемый эффект не отображается. Так просто оставить из следующих действий:

Update:

  $(document).ready(function() { 

       $('#BC, #AB').hide(); 
       $('#BC-show').click(function() { 
        $('.clearfix:visible').not('#BC').hide() 
         $('#BC').toggle('slow'); 
         return false; 
       }); 
       $('#AB-show').click(function() { 
        $('.clearfix:visible').not('#AB').hide() 
         $('#AB').toggle('slow'); 
         return false; 
       }); 
      }); 
+1

Спасибо! Это нормально работает, если я удалю $ (". Prov"). Click (function() { $ (". Clearfix").скрывать(); }); Появится несколько divs. Я хочу, чтобы один div появлялся за раз. – user1652920

0
$(function() { 
    $('#BC, #AB').hide(); 

    $('.prov').click(function() { 
     $('#'+this.id.replace('-show','')).toggle('slow').siblings('div').hide('slow'); 
     return false; 
    }); 
}); 

FIDDLE

Там нет необходимости в двух готовых функций DOM, а первая функция связана с классом Скрывает элементы, а вторая функция, связанная с идентификатором, переключает элементы, которые теперь, конечно, скрыты и всегда будут показаны.

+0

Спасибо. Тем не менее, я хочу, чтобы один div появлялся одновременно. – user1652920

+0

@ user1652920 - обновлен? – adeneo