Хорошо, я разрабатываю сайт и подумал, что вставлю немного jQuery, так как мне действительно нужен опыт js.
Страница с моей проблемой находится здесь: http://new.focalpix.co.uk/moreinfo.php
Рассматриваемый JS:
$(document).ready(function(){
$(".answer").css("display","none");
$("#maincontent a.animate").click(function() {
$("#maincontent .answer").slideUp('slow');
var id = $(this).attr('href');
$(id).slideDown('slow');
return false;
});
});
Это нормально работает, но если вы нажмете на ссылку, по которой ответ уже соскользнул вниз, она скользит вверх, а затем снова вниз.
Я не уверен, как лучше всего этого не допустить - есть идеи?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны использовать эффект .slideToggle ().
$(document).ready(function() {
$(".answer").css("display","none");
$("#maincontent a.animate").click(function() {
$("#maincontent .answer").slideToggle('slow');
});
});
$ ("# maincontent a.animate"). click (function () {var id = $ (this) .attr ('href'); $ (id) .slideToggle ('slow'); return false;});
попробуйте использовать один метод, например:
$(selector).one('effect', 'data for effect', callback function);
он гарантирует, что эффект возникает только один раз для каждого элемента.
Во-первых, я бы предложил следующую структуру для ваших часто задаваемых вопросов:
<div id = "faq">
<div class = "qa" id = "faq_greenandflies">
<span class = "q">What is <a href = "#faq_greenandflies">green and flies</a></span>
<div class = "a">
Super Pickle!
</div>
</div>
<div class = "qa" id = "faq_redandbadforteeth">
<span class = "q">What is <a href = "#faq_redandbadforteeth">Red and bad for your teeth</a></span>
<div class = "a">
a Brick
</div>
</div>
<!--
More FAQ's here
-->
</div>
а затем определите свой jQuery следующим образом:
<script type = "text/javascript">
$(function(){
// hide all answers
$('div#faq .qa .a').hide();
// bind a click event to all questions
$('div#faq .qa .q a').bind(
'click',
function(e){
// roll up all of the other answers (See Ex.1)
$(this).parents('.qa').siblings().children('.a').slideUp();
// reveal this answer (See Ex.2)
$(this).parents('.qa').children('.a').slideDown();
// return true to keep any other click events
return true;
});
// check location.hash to see if we need to expand one (direct link)
$(location.hash).find('.q a').click();
});
</script>
Объяснение:
(Пример 1)
(Пример 2)
рабочая демонстрация - это здесь.
Это сделает за вас несколько вещей:
Я заметил, что, хотя вы приняли мой ответ, ваша теперь реализованная страница не использует это решение и, таким образом, обходит возможность пользователя напрямую ссылаться на элемент (извне самой страницы)
Я пробовал реализовать его, но он просто ничего не сделает на моем сайте - не могу понять разницу между вашим кодом и моим - даже когда я копирую и вставляю! Мне придется продолжать попытки!
Используйте slideToggle (), как сказал Совьют, но просто как совет - вы можете объявить свойство display в фактическом файле CSS вместо того, чтобы объявлять его внутри javascript. jQuery заметит тот факт, что он скрыт в таблице стилей, и по-прежнему будет выполнять соответствующую функцию слайда.
Вы также можете использовать $(".answer").hide();
Вместо установки свойства CSS display. Просто подумал, что дам тебе знать.
Я хотел установить css в jquery, чтобы UA, у которых не включен JS, все еще могли его читать.
«К, я занимаюсь дизайном сайта и подумал, что вставлю немного jQuery, так как мне действительно нужен опыт работы с js». - Я смеюсь, когда читаю эту цитату. jquery - это не то же самое, что javascript. Если вы хотите изучить javascript, возьмите книгу. Если вы хотите изучить jquery, продолжайте