Почему мой Javascript переключает два элемента одновременно?

У меня на странице есть два скрытых DIV с кнопками для их переключения при необходимости. Одно из них — это меню навигации, а другое — форма входа. Я использовал JQuery для переключения красивого слайда вниз и вверх. Теперь я добавил немного JavaScript для переключения слайда, когда пользователь нажимает на соответствующие кнопки во второй раз или если он нажимает за пределами открытого DIV.

Проблема в том, что мой JavaScript переключает оба DIV, чтобы они появлялись и исчезали одновременно, независимо от того, какую кнопку вы нажимаете!

    $('html').click(function (e) {
    if (e.target.id == '#nav_btn') {
    $("#navigation").slideToggle("slow");
    } else {
    $("#navigation").slideToggle("slow");
    }
});

$('html').click(function (e) {
    if (e.target.id == '#log_btn') {
    $("#loginDIV").slideToggle("slow");
    } else {
    $("#loginDIV").slideToggle("slow");
    }
});

Это, без сомнения, что-то действительно очевидное, но что я делаю не так?!

Код в блоках if и else одинаков, и вы нацеливаетесь на элемент html, поэтому в любом месте, куда вы щелкнете, будут переключаться оба элемента div.

Henry Woody 09.08.2024 03:35

В e.target.id не должно быть "#", должно быть if (e.target.id == 'nav_btn') . И вы используете slideToggle и в if, и в else, что так сбивает с толку.

Lã Ngọc Hải 09.08.2024 03:53

Спасибо вам обоим. Я изменил цели с html на #nav_btn и #log_btn соответственно (это была ошибка школьника) и удалил # из обоих операторов e.target.id. Теперь меню прокручиваются независимо при первом нажатии соответствующих кнопок и прокручиваются вверх при втором нажатии, но я потерял возможность прокручивать их вверх при нажатии в другом месте. Это близко, но не совсем там!

Chris Ellis 09.08.2024 08:40
Поведение ключевого слова "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
3
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема заключается в том, что оба других условия вызывают переключение DIV, независимо от того, какая кнопка нажата. Это происходит потому, что блок else не определяет какое-либо конкретное условие, поэтому он всегда запускается всякий раз, когда событие щелчка происходит на чем-либо, кроме конкретной кнопки.

    $('html').click(function (e) {
        e.preventDefault();
    
        if (e.target.id == 'nav_btn') {
            $("#navigation").slideToggle("slow");
        } else {
            $("#navigation").slideUp("slow"); // Hide navigation if anything else is clicked
        }
    
        if (e.target.id == 'log_btn') {
            $("#loginDIV").slideToggle("slow");
        } else {
            $("#loginDIV").slideUp("slow"); // Hide loginDIV if anything else is clicked
        }
    });
  1. Удалить все строки таблицы с помощью jQuery ссылка на вопрос: Удалите все строки таблицы с помощью jQuery Ответ. Вы можете удалить все строки из DataTable, используя метод .clear(), за которым следует .draw(), чтобы перерисовать таблицу без удаленных строк.

     function clearTable() {
         var table = $('#tb-articoli').DataTable(); 
         table.clear().draw(); 
     }
    

Вед... ты легенда! Огромное вам спасибо. Думаю, это легко, когда знаешь как, и, честно говоря... я не знала как! Я твой должник. Спасибо.

Chris Ellis 09.08.2024 15:22

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