Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызвать значение из HTML тега с помощью класса (https://javascript.ru/forum/events/68624-vyzvat-znachenie-iz-html-tega-s-pomoshhyu-klassa.html)

Amilo 27.04.2017 15:24

Вызвать значение из HTML тега с помощью класса
 
Так как я реально чайник.
Объясните возможно ли извлечь значение с помощью класса?

Дело в следующем, я хочу сделать виртуальную клавиатуру таким образом:

<div id="display"></div>

<div id="KeyQ" class="key" value="Q">Q</div>
<div id="KeyW" class="key" value="W">W</div>
<div id="KeyE" class="key" value="E">E</div>


Я могу вывести буквы в тег с идентификатором #display таким образом с помощью идентификатора:
KeyQ.onclick = function() {
document.getElementById("display").innerHTML = "Q";
}

Но таким образом придётся каждому создавать отдельное событие, таким образом код палучится бесконечным.

Я бы хотел вместит все действие в одну функцию используя клас "key" и брат значение у того элемента который был задиствован.
По своей логике сделал так но получаю undefined:
key.onclick = function() {
var val = document. querySelector(".key").value;
document.getElementById("display").innerHTML = val;
}

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

Dilettante_Pro 27.04.2017 15:45

<style>
#display {
    height:20px;
}
.key {
   display:inline-block;
   border:1px solid black;
}
</style>
<div id="display"></div>
<div id="keys">
   <div id="KeyQ" class="key">Q</div>
   <div id="KeyW" class="key">W</div>
   <div id="KeyE" class="key">E</div>
</div>
<script>
document.getElementById("keys").onclick = function(e) {
   if (e.target != e.currentTarget) { document.getElementById("display").innerText += e.target.innerText; }
}
</script>

Amilo 28.04.2017 16:20

Цитата:

Сообщение от Dilettante_Pro (Сообщение 451197)
<style>
#display {
    height:20px;
}
.key {
   display:inline-block;
   border:1px solid black;
}
</style>
<div id="display"></div>
<div id="keys">
   <div id="KeyQ" class="key">Q</div>
   <div id="KeyW" class="key">W</div>
   <div id="KeyE" class="key">E</div>
</div>
<script>
document.getElementById("keys").onclick = function(e) {
   document.getElementById("display").innerText += e.target.innerText;
}
</script>

Идея хорошая но проблема в том что если нажать на DIV с идентификатором keys он выводит весь существующий в ном текс.

laimas 28.04.2017 16:34

Здесь нужна проверка источника события. Можно проверять по имени класса, а можно кнопки сделать к примеру элементами SPAN и проверять имя тега. И если условие выполняется, только тогда принимать ввод.

Dilettante_Pro 28.04.2017 17:18

Amilo,
Добавил проверку по рекомендации laimas

Amilo 28.04.2017 17:29

Спасибо вам вот теперь то что надо :)

laimas 28.04.2017 17:32

Dilettante_Pro,
currentTarget не все гладко с поддержкой.

Dilettante_Pro 28.04.2017 17:41

laimas,
В Internet Explorer с 6 по 8 ? Это актуально?
По мобильным - да.
(на смартфоне в Хроме под Андроидом работает)
Но ТС только начинает тему - у него еще много проблем появится

laimas 28.04.2017 17:47

Да вроде бы и в Сафари не все Ок, или уже есть поддержка?

Dilettante_Pro 28.04.2017 17:52

laimas,
Вроде нету - проверить не могу, у меня надкушенных яблок нету. Дома вечером у жены отберу - гляну.


Часовой пояс GMT +3, время: 21:26.