3 / 3 / 2
Регистрация: 16.01.2014
Сообщений: 125
1

Target работает не так как нужно

03.08.2015, 10:12. Показов 1373. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
HTML5
1
2
3
4
5
6
7
<div>
   <div class="main">
      <div><img></div>
      <div><img></div>
      <div><img></div>
   </div>
</div>
Вот такая структура html. В блоке "main" находятся блоки с картинками внутри. Картинка на весь блок растягивается.

Функция вызывается по клику на блок main
Javascript
1
main.onclick = function (e){}
. И по идее target должен попадать на блок и определять порядок этого элемента. Но таргет попадает на img. Что делать? Как сделать нечто похожее на z-index в css, но только для js. Чтобы при нажатии, он миновал картинку и попадал на дочерний div.

Добавлено через 14 минут
p.s. Конечно же без jquery, на чистом js

Добавлено через 15 минут
Javascript
1
2
3
4
5
6
7
8
9
10
11
    var parent = document.getElementsByClassName("main")[0];
    
    parent.onclick = function (e){
                
                var e = e || event;
        var target = e.target || e.srcElement;
                alert(target);
        for(var i = 0; i < parent.children.length; i++) {
            if(parent.children[i] == target) return console.log(i);
        }
  }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.08.2015, 10:12
Ответы с готовыми решениями:

setprecision() не работает, или работает не так как нужно
cout &lt;&lt; setw(5) &lt;&lt; &quot;X=&quot; &lt;&lt; setprecision(2) &lt;&lt; X; cout &lt;&lt; setw(20) &lt;&lt; &quot;X=&quot; &lt;&lt; setprecision(0)&lt;&lt;...

Функция не работает так, как нужно
Вот задание: В заданном одномерном массиве поменять местами соседние элементы, стоящие на чётных...

Скидка не работает так как нужно
Написал простейший код для скидки, то есть если сумма равно только то, то скидка составляет столько...

Скрипт работает не так, как нужно
Мой html: &lt;form method=&quot;post&quot; name=&quot;calcForm&quot; id=&quot;calcForm&quot; action=&quot;&quot;&gt; &lt;fieldset&gt; ...

14
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.08.2015, 10:41 2
есть метод поэлегантнее
Javascript
1
2
3
target=e.target
while (target!=parent&&target=target.parent&&target!=document){}
if(target==document)return true
0
3 / 3 / 2
Регистрация: 16.01.2014
Сообщений: 125
03.08.2015, 10:44  [ТС] 3
Цитата Сообщение от BANO Посмотреть сообщение
target=e.target
while (target!=parent&&target=target.parent&&target!=document){}
if(target==document)return true
Хммм..
Цитата Сообщение от fajjet Посмотреть сообщение
И по идее target должен попадать на блок и определять порядок этого элемента
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.08.2015, 10:49 4
Лучший ответ Сообщение было отмечено fajjet как решение

Решение

target это элемент на который попал евент
а вот this в твоём коже будет именно <div class="main">

Добавлено через 1 минуту
вот урок
1
3 / 3 / 2
Регистрация: 16.01.2014
Сообщений: 125
03.08.2015, 11:06  [ТС] 5
Спасибо)) Еще один вопрос. Допустим в этот div вложен p. Как обратиться к нему, чтобы узнать его высоту, например.
Javascript
1
2
3
4
5
6
7
8
9
10
               var elems = document.querySelectorAll('.in-top');
 
    for (var i = 0; i < elems.length; i++) {
        elems[i].addEventListener("click", nsize, true);
    }
                function nsize(){
 
        this.style.width = '10%';
 
    }
Вот в этой же функции
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.08.2015, 11:13 6
Цитата Сообщение от fajjet Посмотреть сообщение
for (var i = 0; i < elems.length; i++) {
* * * * elems[i].addEventListener("click", nsize, true);
* * }
не самый лучший способ


ну а высоту и ширину можно узнать либо через getComputedStyle либо, что менее заморочено, через innerHeight, а ширину через innerWidth
0
3 / 3 / 2
Регистрация: 16.01.2014
Сообщений: 125
03.08.2015, 11:29  [ТС] 7
Мне на самом деле не надо узнавать ширину. Просто проверял. Вот настоящая задача.
HTML5
1
2
3
4
5
<div class="main">
   <div><img><p></p></div>
   <div><img><p></p></div>
   <div><img><p></p></div>
</div>
Нажимая на блок, нужно обратиться к в дочернему элементу p, узнать его высоту и транслейтом сместить блок, на который нажали на высоту p.

Добавлено через 45 секунд
Как такое реализовать?))
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.08.2015, 11:42 8

Не по теме:

ну ты и...



ладно не важно, в настоящей задаче не понятно какой p, какой блок, распиши пожалуйста попонятнее
0
3 / 3 / 2
Регистрация: 16.01.2014
Сообщений: 125
03.08.2015, 11:49  [ТС] 9
Цитата Сообщение от fajjet Посмотреть сообщение
<div class="main">
* *<div><img><p></p></div>
* *<div><img><p></p></div>
* *<div><img><p></p></div>
</div>
Общий блок main. В котором находятся divы, c шириной 20%. Вот при нажатии на эти divы, нужно обращаться к p элементу и определять его высоту. Высоты у p как таковой нет. Только паддинги. То есть это будет делаться через clientHeight. Самое главное это узнать высоту p, и сместить этот родительский div, на который нажали транслейтом на эту же высоту. Надеюсь понятно))
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.08.2015, 11:53 10
fajjet, честно не очень
особенно слово транслейтом
0
3 / 3 / 2
Регистрация: 16.01.2014
Сообщений: 125
03.08.2015, 12:00  [ТС] 11
HTML5
1
2
3
4
5
<div class="main">
  <div class="child"><img><p></p></div>
  <div class="child"><img><p></p></div>
  <div class="child"><img><p></p></div>
</div>
В общем про анимацию забей)) Есть блок "main". Ширина и высота 100%. В нем блоки "child" с шириной 20% и высотой 100%. В блоке "child" вложен IMG и P. Вот при нажатии на блок child, нужно получить высоту дочернего элемента P.
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.08.2015, 12:40 12
а если клик будет мимо child?

ну ладно это не важно, сейчас сделаю
0
3 / 3 / 2
Регистрация: 16.01.2014
Сообщений: 125
03.08.2015, 12:41  [ТС] 13
Да не)) Все я сам методом тыка разобрался)) Спасибо за помощь.
Javascript
1
2
3
4
5
6
7
8
9
var elems = document.querySelectorAll('.specification > div');
 
    for (var i = 0; i < elems.length; i++) {
        elems[i].addEventListener("click", highlightThis, true);
    }
 
    function highlightThis() {
        this.querySelector("p").style.background = "black";
    }
Просто JS синтаксис плохо знаю((
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.08.2015, 13:01 14
ну я старался)))
вот то чо получилось
Javascript
1
2
3
4
5
6
7
    main=document.getElementsByClassName("main")[0];
    main.onclick=function(e){
        targ= e.target || e.srcElement;
        if(targ==this) return true/*юзер промазал по чилдам*/
        while(!targ.parentNode.classList.contains("main")&&(targ=targ.parentNode)){        }
        alert(targ.querySelector("p").clientHeight)
    }


Добавлено через 2 минуты
а твой код можно и покороче записать

Javascript
1
2
3
4
5
6
[].forEach.call(document.querySelectorAll('.specification > div'),function(e){
   e.addEventListner("click",highlightThis,false)// тут я немного отсебятины поставил, а точнее false
})
    function highlightThis() {
        this.querySelector("p").style.background = "black";
    }
единственное, я не понимаю зачем тебе true?
1
3 / 3 / 2
Регистрация: 16.01.2014
Сообщений: 125
03.08.2015, 13:08  [ТС] 15
Спасибо за старание, но мне подходит второй вариант больше. Так как будет имитация hover. То есть два ивентлистенера. Тру стояло по дефолту)) Я даже не знаю синтаксис этой функции))) Сейчас прочитал синтаксис - убрал))) Еще раз спасибо за помощь и старания)))
0
03.08.2015, 13:08
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2015, 13:08
Помогаю со студенческими работами здесь

Слип работает не так как нужно
В чем проблема, когда слип отрабатывает кнопка висит в состоянии нажатия а не после того как все...

rand() работает не так как нужно
Запускается n потоковых функций, каждый из них приостанавливается во время своего выполнения, а в...

NetworkStream.DataAvailable работает не так как нужно!
try { byte bytes = new byte; int i = 0; ...

Событие Shown работает не так как нужно
Повесил событие private void Form1_Shown(object sender, EventArgs e) Но оно работает не так как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Интеграция Arduino и ChatGPT: Практическое руководство
InfoMaster 16.01.2025
В современную эпоху технологических инноваций интеграция искусственного интеллекта с микроконтроллерами открывает принципиально новые возможности для создания умных устройств и автоматизированных. . .
Как создать робота, управляемого ChatGPT
InfoMaster 16.01.2025
Концепция проекта В современную эпоху искусственный интеллект и робототехника становятся все более доступными для энтузиастов и разработчиков. Создание роботизированной руки, управляемой ChatGPT,. . .
Как создать ChatGPT бота в Telegram на Python
InfoMaster 16.01.2025
В современном мире технологии искусственного интеллекта становятся все более доступными для разработчиков, открывая новые возможности для создания умных и интерактивных приложений. Одним из самых. . .
Машинное обучение с помощью Python
InfoMaster 16.01.2025
Машинное обучение стало неотъемлемой частью современных технологий, позволяя компьютерам учиться на основе данных и принимать решения без явного программирования. В сочетании с языком. . .
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru