Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.12.2013, 13:08
Аспирант
Отправить личное сообщение для Иззет Посмотреть профиль Найти все сообщения от Иззет
 
Регистрация: 22.11.2013
Сообщений: 39

Проблема с заменой toggle
Здравствуйте, столкнулся с проблемой замены toggle(). Как я знаю, данный метод в последних версиях jquery работает иначе, нашёл такую альтернативу :
var flag = new Boolean(true);//Создаем логическую переменную (со значением true)
$('.table').hide(); 

$('h3').click(function() {

  if (flag) {//Если flag == true
    flag = false;//Меняем значение переменной flag
    func1.call(this);//Вызываем func1 с контекстом этой функции (т.е. в вызванной функции this = this этой функции)
  } else {//Если flag не равно true
    flag = true;
    func2.call(this);
  }
  return false;
});
 

function func1() {$('.table').slideDown(500);};
function func2() {$('.table').slideUp(500);};


<h3>Заголовок</h3>
<div class="table">Контент</div>
<h3>Заголовок</h3>
<div class="table">Контент</div>

Корень проблемы - переменная flag будет менять значение true/false вне зависимости по какому именно h3 мы кликаем, можно конечно для каждого заголовка прописать свою переменную, но получится довольно большой код, нет ли более изящного решения ?
Ответить с цитированием
  #2 (permalink)  
Старый 25.12.2013, 13:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

как насчет slideToggle()?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 25.12.2013, 14:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Иззет,
если очень хочется plugin toggle for jquery или почему неработает toggle
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
    .table{
      display: none;
    }
    h3{
      cursor: pointer;
    }

  </style>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<h3>Заголовок</h3>
<div class="table">Контент</div>
<h3>Заголовок</h3>
<div class="table">Контент</div>
<script>
$.fn.oldtoggle = function () {
    var b = arguments;
    return this.each(function (i, el) {
        a = function () {
            var c = 0;
            return function () {
                b[c++ % b.length].apply(el, arguments)
            }
        }();
        $(el).click(a)
    })
};
function func1() {
var $next = $(this).next('.table')
$('.table:visible').not($next).prev().click();
$next.slideDown(500)};
function func2() {$(this).next('.table').slideUp(500)};
$('h3').oldtoggle(func1, func2);
</script>
</body>
</html>

Последний раз редактировалось рони, 25.12.2013 в 15:13.
Ответить с цитированием
  #4 (permalink)  
Старый 25.12.2013, 14:23
Аспирант
Отправить личное сообщение для Иззет Посмотреть профиль Найти все сообщения от Иззет
 
Регистрация: 22.11.2013
Сообщений: 39

danik.js,Спасибо, очень полезный метод. Вопрос - нужно давать класс заголовку, когда блок под ним развернут и убирать класс, когда блок сворачивается, как это реализовывается в данном случае ?
Ответить с цитированием
  #5 (permalink)  
Старый 25.12.2013, 14:50
Аватар для animhotep
Профессор
Отправить личное сообщение для animhotep Посмотреть профиль Найти все сообщения от animhotep
 
Регистрация: 17.01.2013
Сообщений: 887

)) http://api.jquery.com/toggleClass/
Ответить с цитированием
  #6 (permalink)  
Старый 25.12.2013, 14:58
Аспирант
Отправить личное сообщение для Иззет Посмотреть профиль Найти все сообщения от Иззет
 
Регистрация: 22.11.2013
Сообщений: 39

рони,
Большое спасибо, работает, можете, если не трудно, комментариями объяснить как ваша функция работает? я не совсем разобрался с её принципом работы. Ещё одна проблема - нужно чтобы в данный момент только один блок был бы виден, т.е. чтобы при разворачивании одного блока, другие бы все скрывались. $('.table').hide() в func1 не решает дело
Ответить с цитированием
  #7 (permalink)  
Старый 25.12.2013, 15:16
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Аналог на stackoverflow, с небольшим отличием, нормальным предложенным именем, необфусцированными переменными:
http://stackoverflow.com/a/14478259

рони, извини, минус поставить не могу - скажи спасибо глючному движку.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 25.12.2013, 15:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Иззет
при разворачивании одного блока, другие бы все скрывались.
добавлено в func1 -- для такой логики toggle ненужен ...
Сообщение от Иззет
если не трудно, комментариями
трудно - список функций выполняется по кругу на элементе и в контексте этого элемента на событие клик этого элемента
Ответить с цитированием
  #9 (permalink)  
Старый 25.12.2013, 15:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Иззет,
Вариант без toggle ...
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
    .table{
      display: none;
    }
    h3{
      cursor: pointer;
    }

  </style>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<h3>Заголовок</h3>
<div class="table">Контент</div>
<h3>Заголовок</h3>
<div class="table">Контент</div>
<script>
var $table = $('.table');
$('h3').click(function ()
{
   var $next = $(this).next('.table');
   $table.not($next).slideUp(500);
   $next.slideToggle(500)
});
</script>
</body>
</html>

Последний раз редактировалось рони, 25.12.2013 в 15:39.
Ответить с цитированием
  #10 (permalink)  
Старый 25.12.2013, 15:55
Аспирант
Отправить личное сообщение для Иззет Посмотреть профиль Найти все сообщения от Иззет
 
Регистрация: 22.11.2013
Сообщений: 39

рони,
Спасибо за помощь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
plugin toggle for jquery или почему неработает toggle рони Ваши сайты и скрипты 0 10.11.2013 13:27
Проблема с toggle milanac Общие вопросы Javascript 4 29.10.2013 19:24
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
Помогите. В чем проблема ? (toggle) brondex Events/DOM/Window 1 23.10.2011 18:48
дождаться выполнения toggle maximu$$ jQuery 7 04.05.2011 14:58