Jump to content
  • 0

Нужна помощь по JS


Endorphin
 Share

Question

Всем привет, нужна помощь в пролитии света на одну из тем в JS, называется она делегирование событий, Кантор на своем сайте приводит пример с табличкой и изменение цвета. Хорошо это я понял как у него работает и тему понял, НО! Когда я начинаю писать свой JS код, вещать обработчик на общего родителя, например есть вот такая разметка 

, и я хочу чтобы при по кнопке в любом из блоков мой wrapper-slider становился display:block; Не получаеться написать правильный JS для этого дела((( Ну или так же есть скрипт увеличения цены и количества товара, но мне пришлось на каждый блок вещать свой обработчик так как по другому к сожалению не могу додуматься как, теорию читал, но тех примеров оказалось мало для понимания( HELP ME!

Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

@Endorphin

Смотри.

1. var catBtn = document.querySelectorAll('button'); - ты получаешь массивоподобную коллекцию элементов. Т.е. все кнопки на странице.

2. if(target !== catBtn) - тут ты пытаешься сравнить эту коллекцию с одним единственным элементом, до которого дошло событие. И, естественно, они будут не равны.

Тебе нужно сравнивать полученный таргет с известными данными о твоей кнопке. Это может быть название элемент, ид, класс, какие-либо дата-аттрибуты.

Но двигаешься ты в правильном направлении :)

Link to comment
Share on other sites

  • 0

Так, понял, попробую обновить, исходя из вашей информации, а как я могу с помощью нажатия кнопки изменить стили или классы у элемента который именно в том блоке в котором произошло событие.

Link to comment
Share on other sites

  • 0
7 minutes ago, Endorphin said:

а как я могу с помощью нажатия кнопки изменить стили или классы у элемента который именно в том блоке в котором произошло событие.

1. Получить элемент двигаясь по DOM относительно кнопки - http://learn.javascript.ru/traversing-dom

2. Изменить стиль путем добавления инлайн-стилей или класса, где будут прописаны эти стили.

Link to comment
Share on other sites

  • 0

Сделал сравнение по имени тега, все равно ноль эмоций, и с этими child вообще не понял, как написать функцию что бы он находил именно в этом блоке этот элемент, или в переменную прям положить второй элемент .catalog-item'а? Я не понимаю эту тему потому что ни одного примера не нашел именно с подобной структурой, разобранного простым языком(

Вот всё делаю вроде как в примере у Кантора, а не работает :angry:

Link to comment
Share on other sites

  • 0

Смотри, я добавила алерт с target.tagName, сравни, что он выводит и с каким значением ты сравниваешь. Не забывай проверять те свойства и переменные, которые ты используешь, особенно на начальном этапе, console.log() и alert() должны стать твоими лучшими друзьями :). Да, и строки всегда лучше приводить к одному регистру (toLowerCase() / toUpperCase()).

Далее, тебе нужно получить '.wrapper-slider'. Что ты имеешь? У тебя есть полученная кнопка - это var target = e.target; Т.е. это будет твой стартовый узел. От него ты можешь перейти к следующему сестринскому элементу (target.nextElementSibling) или получить общего родителя (parentNode), в данном случае .catalog-item, а потом внутри него уже найти нужный элемент в потомках (children).

 

 

  • Like 1
Link to comment
Share on other sites

  • 0

Так а children мы можем найти только по номеру в псевдомассиве? Можно как то по классу children найти?

Я прям готов вас расцеловать:D наконец то я разобрался в этой теме и у меня получилось сделать, прям как Моисей раздвигал моря, вы мне раздвинули границы для моего дальнейшего обучения. За день научился получать элементы по таргету и через parent и children, спасибо вам ОГРОМНЕЙШЕЕ, никто не хотел нормально объяснить, на протяжении трех недель покоя мне это дело не давало. 

Link to comment
Share on other sites

  • 0
7 minutes ago, Endorphin said:

Так а children мы можем найти только по номеру в псевдомассиве? Можно как то по классу children найти?

можно циклом прбежаться. Кстати и .querySelector/QuerySelectorAll тоже должны сработать, если применить их к родителю.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By ilya1203
      Прошу помочь с заданием:
      Написать файл скрипта, который генерирует три числа, соответствующие значениям высоты, длины и ширины комнаты. Отобразить в консоли:
      a.Площадь стен комнаты
      b.Объём комнаты
      c.*Объём комнаты за вычетом случайно сгенерированного количества чисел, которые определяет объёмы случайно зашедших в комнату людей.
      (в итоге запустит скрипт последством консоли)
      (заранее огромное спасибо)
    • By Yurich
      Всем привет, у меня такой вот вопрос, делаю сайт через react и при изменении расширения что-то идёт не так и какой-то бред получается, подскажите как решить данную проблему. Я вообще не понимаю из-за чего это происходит, по этому не могу нормально объяснить 😅.

    • By jksnf
      Не работает transition при появлений модального окна:
      <a class="btn">Modal</a> <div class="modal"> <div class="overlay"> <div class="content"> <a class="close">X</a> <h1>Title</h1> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Sunt repellat asperiores rerum animi officiis minus corporis iure voluptate accusantium, ut optio ratione iusto nemo delectus. Quasi illum libero dolorum neque?</p> </div> </div> </div> //scss .modal .overlay{ position: fixed; top: 0;left: 0; width: 100%;height: 100%; background: rgba($color: #000000, $alpha: .8); z-index: 1; display: none; } .modal .content{ width: 500px;height: 200px; position: absolute; top: 50%;left: 50%; transform: translate(-50%, -50%); background-color: #fff; z-index: 2; text-align: center; display: none; a{ line-height: 30px; font-weight: bold; color: #fff; top: -50px;; position: absolute; right: -50px; font-size: 40px; padding: 10px; } h1{ margin-bottom: 20px; } } .modal.active .overlay{ display: block; } .modal.active .content{ display: block; } //Jquery $(document).ready(function(){ $(".btn, .close").click(function() { $(".modal").toggleClass("active") }) }) Я понимаю что на display не работает transition. но и нельзя ставить opacity т.к перекрывает контент сзади него изначально.

      Что делать?
    • By bromble
      Всем привет!
      Может ли кто-нибудь сказать как реализована такая каруселька у элементов каталога?
      MyVideo_55.mp4
    • By IsayR
      Всем привет! Подскажите, пожалуйста, как правильно сделать раскрывающиеся блоки со скрытым содержанием внутри? У меня в принципе все работает, блок открывается и закрывается, НО если я нажимаю на блок, а не на стрелочку, она у меня остается в таком же положении(а она должна у меня меняться, когда блок открывается), и получается куча мала, и выглядит это не очень презентабельно. Подскажите, пожалуйста!
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="wrapper-div"> <div class="div"> <div class="window-one"> <h3 class="title"> Заголовок 1 </h3> <div class="arrow-test"></div> </div> <div class="window-two"> <div class="text">Текст 1</div> </div> </div> </div> <div class="wrapper-div"> <div class="div"> <div class="window-one"> <h3 class="title"> Заголовок 2 </h3> <div class="arrow-test"></div> </div> <div class="window-two"> <div class="text">Текст 2</div> </div> </div> </div> <div class="wrapper-div"> <div class="div"> <div class="window-one"> <h3 class="title"> Заголовок 3 </h3> <div class="arrow-test"></div> </div> <div class="window-two"> <div class="text">Текст 3</div> </div> </div> </div> .div{ border: 1px solid #3A444E; border-radius: 10px; width: 300px; height: 64px; overflow: hidden; } .div.open { height: auto; background: #000; color: #fff; } .window-one { display: flex; align-items: center; justify-content: space-between; } .title { margin-bottom: 20px; } .arrow-test { content: ''; background: url('http://cdn.onlinewebfonts.com/svg/img_387044.png') no-repeat center center / 100%; width: 30px; height: 30px; cursor: pointer; } .arrow-test.open { content: ''; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Eo_circle_yellow_arrow-up.svg/1024px-Eo_circle_yellow_arrow-up.svg.png') no-repeat center center / 100%; width: 30px; height: 30px; cursor: pointer; } $('.div, .arrow-test').click( function(){ $(this).toggleClass('open')});  
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy