Работа if else
Добрый день.
Хочу подключить на странице сайта кнопку, которая разворачивает и сворачивает контейнер div. С этими функциями она справляется, но по отдельности. Почему при использовании if..else выполняются подряд все действия, а не только какое-то одно. Подскажите, пожалуйста, в чем может быть дело? Изначально объект #show-more имеет текст "Показать еще". <script> $('#show-more').click(function() { var text = document.getElementById("show-more").textContent; alert (text); if (text == "Показать еще" ) { $("#show-more").text("Свернуть"); } else { $("#show-more").text("Теперь так"); } }); </script> |
$('#show-more').click(function() { this.textContent = this.textContent=='Показать еще' ? 'Свернуть' : 'Теперь так' }) Но что после первого щелчка будет исполняться, если текста 'Показать еще' элемент более не будет иметь? |
Нет, вообще вот так должно быть:
<script> $('#show-more').click(function() { var text = document.getElementById("show-more").textContent; if (text == "Показать еще" ) { $("#show-more").text("Свернуть"); $("#slider-block").css({"height: 100%"}); } else { $("#show-more").text("Показать еще"); $("#slider-block").css({"height: 30%"}); } }); </script> Мне просто непонятен механизм: почему по одному клику срабатывают оба действия на разные условия. upd. Ваш пример я попробовал, тоже самое: подряд выполняются оба действия. |
Цитата:
сделайте минимальный макет. |
Цитата:
var btn = $('#show-more').click(function() { var text = btn.text(); if (text == "Показать еще" ) { btn.text("Свернуть"); ..... Постоянно получать jquey объект, это плохо. А тернарный оператор позволяет более лаконично это записать. Можно текстом и не заниматься, например: <style> #show-more:after { content: 'Показать еще'; } #show-more.open:after { content: 'Свернуть'; } .panel { display: none; } </style> <span id="show-more"></span> <div class="panel">Что-то</div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script> $('#show-more').click(function() { $(this).toggleClass('open').next().slideToggle(); }) </script> |
Цитата:
Почему происходит два клика. Только теперь непонятно, почему. Наверное из-за особенностей плагина. Я этот код пытаюсь вставить на страницу плагина-слайдера. |
Цитата:
Второй ваш пример я делал изначально (но без использования ajax), но он немного не подходит по сути. У меня есть плагин-слайдер, в котором на каждом слайде есть текст разной длины. Хотелось бы сделать так: каждый слайд изначально отображает только, например, 300px от всей высоты, а после нажатия на кнопку div полностью разворачивается/сворачивается. И не хотелось бы делать отдельный div, который скрывается под кнопкой. |
Это лишь пример, вам никто не запрещает помещать раскрываемую панель где угодно. Текст на кнопке в примере изменяется исключительно стилями переключением - $(this).toggleClass('open'). Если эта панель имеет родителя от высоты которого ее высота выражена в процентах, то сворачивать/разворачивать ее также можно переключая класс - $("#slider-block").toggleClass('class_name'), по умолчанию в css ее высота указана 30%, а при добавлении класса 100%. Хотя можете и $("#slider-block").css(....).
|
Большое спасибо за ответы. Более или менее разобрался.
Однако вся проблема, оказывается, была в другом: всегда вместо одного происходит два нажатия, скорее всего это из-за плагина. И как это уже исправлять вот совсем никаких мыслей :) |
knhoman,
кидай ссылку поможем |
Часовой пояс GMT +3, время: 21:27. |