Разбираюсь с jQuery

Хорошо, я разрабатываю сайт и подумал, что вставлю немного 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;
    });

});

Это нормально работает, но если вы нажмете на ссылку, по которой ответ уже соскользнул вниз, она скользит вверх, а затем снова вниз.

Я не уверен, как лучше всего этого не допустить - есть идеи?

«К, я занимаюсь дизайном сайта и подумал, что вставлю немного jQuery, так как мне действительно нужен опыт работы с js». - Я смеюсь, когда читаю эту цитату. jquery - это не то же самое, что javascript. Если вы хотите изучить javascript, возьмите книгу. Если вы хотите изучить jquery, продолжайте

theman_on_vista 12.01.2009 22:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
383
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы должны использовать эффект .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;});

Rich Bradshaw 12.01.2009 16:29

попробуйте использовать один метод, например:

 $(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)

  • это - ссылка, по которой щелкнули
  • получить элемент, содержащий это и имеющий класс qa (поле, содержащее как вопрос, так и ответ)
  • выберите всех его братьев и сестер. (теперь у нас есть все qa как объект jQ)
  • скрыть ответы

(Пример 2)

  • это - это строка или ссылка, по которой щелкнули
  • получить элемент, содержащий это и имеющий класс qa (поле, содержащее как вопрос, так и ответ)
  • раскрыть ответ

рабочая демонстрация - это здесь.

Это сделает за вас несколько вещей:

  • Если пользователь глубокие ссылки на ответ, ответ раскрывается автоматически
  • Если пользователь нажимает на один ответ, все остальные ответы скрываются
  • Вы можете дать своим div правильные идентификаторы, что поможет поисковой оптимизации ссылок на отдельные ответы.

Я заметил, что, хотя вы приняли мой ответ, ваша теперь реализованная страница не использует это решение и, таким образом, обходит возможность пользователя напрямую ссылаться на элемент (извне самой страницы)

Ry Biesemeyer 13.01.2009 00:33

Я пробовал реализовать его, но он просто ничего не сделает на моем сайте - не могу понять разницу между вашим кодом и моим - даже когда я копирую и вставляю! Мне придется продолжать попытки!

Rich Bradshaw 15.01.2009 00:32

Используйте slideToggle (), как сказал Совьют, но просто как совет - вы можете объявить свойство display в фактическом файле CSS вместо того, чтобы объявлять его внутри javascript. jQuery заметит тот факт, что он скрыт в таблице стилей, и по-прежнему будет выполнять соответствующую функцию слайда.

Вы также можете использовать $(".answer").hide();

Вместо установки свойства CSS display. Просто подумал, что дам тебе знать.

Я хотел установить css в jquery, чтобы UA, у которых не включен JS, все еще могли его читать.

Rich Bradshaw 12.01.2009 16:31

Другие вопросы по теме