JQuery открыть аккордеон по ссылке

0

Что я делаю не так. Аккордеон работает, но когда я пытаюсь открыть его из внешней ссылки (fx. Mysite.com/mypage.php#2) - он не откроет аккордеон!

Мой заголовок:

<script type="text/javascript" src="//code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript" src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<script>
  $(document).ready(function() {
    $("#accordion").accordion({
     active: false,
     collapsible: true,
     autoHeight: false,
     navigation: true,
     header: '.menuitem'
   }); 
   $(".menuitem").click(function(event){
     window.location.hash=this.hash;
   });
  });
  </script>

Мой html:

  <div id="accordion">
  <a class="menuitem" href="#1">Header 1</a>
  <!-- accordion panel --><div>
  CONTENT 1</>
  <!-- end accordion panel --></div>
  <a class="menuitem" href="#2">Header 2</a>
  <!-- accordion panel --><div>
  CONTENT 2</>
  <!-- end accordion panel --></div>
  <!-- end accordion -->
  • 0
    значит внешняя ссылка?
Теги:
accordion

5 ответов

2
Лучший ответ

Вот рабочий код - Jsfiddle Link

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>

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

    $("#accordion").accordion({
         active: false,
         collapsible: true,
         autoHeight: false,
         navigation: true,
         header: 'a.menuitem'
    }); 

    $(".menuitem").click(function(event){
        window.location.hash=this.hash;
    });

    //get the hash value
    var locationHash = window.location.hash;

    //split the value
    var hashSplit = locationHash.split('#');

    //get the tab number
    var currentTab = hashSplit[1];

    window.setTimeout(function(){
        //open the tab for the current hash
        $("#accordion").accordion({ active: parseInt(currentTab)-1 });
    }, 1000);

});
</script>


</head>



<body>

<div id="accordion">
  <a class="menuitem" href="#1">Header 1</a>
  <!-- accordion panel -->
  <div>
    CONTENT 1  
  </div>

  <a class="menuitem" href="#2">Header 2</a>
  <div>
    CONTENT 2
  </div>
  <!-- end accordion -->
</div>

</body>
</html>
1

@Ashis. Ваш код работает отлично, каждый DIV имеет тот же размер, поэтому, когда у меня есть DIV с двумя строками, внизу есть много свободного места. Когда он содержит много информации, DIV красиво заполняется.

  • 0
    Тем временем я нашел решение. Помещение: --- heightStyle: content, --- в код JS, это решает проблему.
  • 0
    Любая идея, как позволить выбранный якорь прокручивать к вершине?
0

Вы можете сделать что-то подобное, хотя это не идеальное решение:

$(document).ready(function() {
    var $hash = window.location.hash;
    var $acc = $hash ? $hash : 1;
    $("#accordion").accordion({
     active: false,
     collapsible: true,
     autoHeight: false,
     navigation: true,
     header: '.menuitem',
     activate: $acc
   });
});  

Возможно, потребуется много изменений.

0
if ($.url().hash.length) {
    var item = $.url().hash;    
    $('#accordion').accordion({active: item - 1}); // since you started numbering at 1 and not 0.
}
-1

Ваш аккордеон - динамический элемент вашей страницы (управляемый кодом javascript).

Установка html-якоря в вашем URL-адресе (например, # 2) не приведет к появлению аккордового кода, вы просто поручаете браузеру перейти к закрепленному элементу!

Вам нужно будет добавить код javascript на вашу страницу, чтобы получить значение привязки и передать этот параметр вашему виджету-соглашению.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню