RemoveClass, а затем addClass не работает

Когда я нажимаю на div, этот div покрывается черной линией.

Но когда я нажимаю на любой другой div, мне нужен старый div, чтобы удалить эти черные линии, и только у current div должна быть граница. Ниже приведен код, которому я пытаюсь следовать:

var addDiv = document.getElementById("addDiv");

addDiv.addEventListener("contextmenu", function(event) {
  event.preventDefault();

  if ($(event.target).hasClass('context_menu')) {
    $(event.target).siblings('.clickedDiv').removeClass('clickedDiv');
    $(event.target).addClass('clickedDiv');
    console.info($(event.target).addClass('clickedDiv'));
  } else {
    $(event.target).parent().addClass('clickedDiv');
  }

  $("#ctxMenu").css({
    'top': event.pageY,
    'left': event.pageX
  }); // only this line to be added
  $("#ctxMenu").show();
}, false);

addDiv.addEventListener("click", function(event) {
  $("#ctxMenu").hide();
}, false);

Приведенный выше код запускается при щелчке правой кнопкой мыши.

Я хочу, чтобы когда я щелкнул правой кнопкой мыши div с идентификатором #addDiv, он должен удалить класс 'clickedDiv` отовсюду, а затем продолжить код, чтобы добавить класс в выбранный div.

Мой html-код:

<div id = "addDiv" [innerHtml] = "divCode | noSanitize"></div>
<div id = "ctxMenu" style = "display:none">
  <ul id = "ctxImage" style = "display:none">
    <li (click) = "clone()">Clone</li>
    <li (click) = "changeImg()">Change Image</li>
  </ul>
</div>

«Уберите clickedDiv отовсюду». Вы имеете в виду #addDiv?

choz 05.04.2018 14:18

обновил мой код, пытаясь использовать этот $(event.target).siblings('.clickedDiv').removeClass('clicked‌​Div');, но эта строка не работает

user2828442 05.04.2018 14:20

K Итак, я все еще вижу, что вы привязываете событие contextmenu только к addDiv. Когда в вашем контексте написано when i click on any other div, i want the old div to remove those black lines and only the current div should have the border. Я думаю, вам также следует разместить здесь свой html

choz 05.04.2018 14:21

вы можете просто выбрать все div, содержащие класс clickedDiv, и добавить к элементу event.target. $(".clickedDiv").removeClass("clickedDiv"); $(event.target).addClass("clickedDiv");

Manjunath 05.04.2018 14:24

Я обновил вопрос с помощью html-кода

user2828442 05.04.2018 14:25
Поведение ключевого слова "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) для оценки ваших знаний,...
1
5
105
2

Ответы 2

Добавьте второй класс ко всем div, а затем удалите класс clickedDiv из каждого члена второго класса.

Что-то вроде:

$(".clickableDiv").on("contextmenu", function() {
    $(".clickableDiv").removeClass("clickedDiv");
    $(this).addClass("clickedDiv");
});

И HTML:

<div class = "clickableDiv" id = "div_1"></div>
<div class = "clickableDiv" id = "div_2"></div>
<div class = "clickableDiv" id = "div_3"></div>

Обновите свой код следующим образом:

$("#addDiv").bind("contextmenu",function(event){
    event.preventDefault();

    if ($(event.target).hasClass('context_menu')){
        $(event.target).siblings('.clickedDiv').removeClass('clickedDiv');
        $(event.target).addClass('clickedDiv');
        console.info($(event.target).addClass('clickedDiv'));
}
else{
  $(event.target).parent().addClass('clickedDiv');
}

    $("#ctxMenu").css({'top':event.pageY,'left':event.pageX});   // only this line to be added
    $("#ctxMenu").show();
},false);

$('#addDiv').on("click",function(event){
    $("#ctxMenu").hide();
},false);

Вы должны использовать bind и on для регистрации слушателей событий.

Добавьте строку прослушивателя событий, пожалуйста, добавьте, без нее она не будет работать

user2828442 05.04.2018 14:53

без этой строки `addDiv.addEventListener (" contextmenu ", function (event) {` это не работает, при щелчке правой кнопкой мыши мое меню не появляется, вы можете войти в программу просмотра команды

user2828442 05.04.2018 15:14

не работает, дайте мне знать, сможете ли вы показать экран

user2828442 05.04.2018 15:19

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