Yui
(p)
27.Февраль.2021 14:16:20
#21
Просто была не закрыта фигурная скобка.
Почему-то js не рабочий, то есть через функцию тегу <i>
должно присваиваться onclick=f(this)
(это работает), но почему-то не происходит передача id, id присваивается так:
btnImg.setAttribute('id_1', id);
тег <i>
становится таким:
<i class="fas fa-play" height="40" width="40" id="p-img-0" id_1="1" onclick='f(this)' aria-hidden="true"></i>
Но в функцию вывода id_1 почему то не передается:
function f(el){
alert(el.id_1);
}
onclick=f(this)
присваивается так:
btnImg.setAttribute("onclick", 'f(this)');
AlexP
(Alex P.)
27.Февраль.2021 15:56:17
#22
не знаю работает ли так, но тут можно сразу без HTML
btnImg.onClick = ...
или еще лучше
использовать addEventListener
, а не on
) Например, потому что если где-то еще подписать так еще один обработчик, то первый уберется.
Yui
(p)
27.Февраль.2021 16:08:32
#23
Просто у нас есть <div>
, который должен заполняться, но если посмотреть исходный код там ничего не будет, а в коде элемента будет. То есть изначально у нас нет этого объекта и что-то присваивать надо в btnImg.setAttribute
.
Или можно тег <i>
инициализировать по классу?
AlexP
(Alex P.)
27.Февраль.2021 16:11:58
#24
Не понял о чем это, но нет смысла использовать
В JS можно сразу у этого объекта
AlexP:
btnImg.onClick = ...
Yui
(p)
27.Февраль.2021 16:15:13
#25
Ну так эта функция используется только для заполнения как я понял
function createTrackItem(index,name,duration, id){
var btnImg = document.createElement('i');
btnImg.setAttribute("class", "fas fa-play");
btnImg.setAttribute("height", "40");
btnImg.setAttribute("width", "40");
btnImg.setAttribute("id", "p-img-"+index);
btnImg.setAttribute('id_1', id);
btnImg.setAttribute("onclick", 'f(this)');
document.querySelector("#pbp-"+index).appendChild(btnImg);
}
AlexP
(Alex P.)
27.Февраль.2021 16:45:38
#26
Какая?
this
точно не будет работать в атрибуте HTML.
const self = this
btnImg.onclick = () => f(self)
Yui
(p)
27.Февраль.2021 16:50:14
#27
AlexP:
Какая?
эта:
function createTrackItem(index,name,duration, id){
var btnImg = document.createElement('i');
btnImg.setAttribute("class", "fas fa-play");
btnImg.setAttribute("height", "40");
btnImg.setAttribute("width", "40");
btnImg.setAttribute("id", "p-img-"+index);
btnImg.setAttribute('id_1', id);
btnImg.setAttribute("onclick", 'f(this)');
document.querySelector("#pbp-"+index).appendChild(btnImg);
}
AlexP
(Alex P.)
27.Февраль.2021 16:56:29
#28
Так и что мешает тут сразу установить onclick
или вызвать addEventListener
не записывая это в атрибут HTML?
Yui
(p)
27.Февраль.2021 17:06:36
#29
AlexP:
onclick
Если мы сделаем так, то это исполнится сразу, так как функция отвечает только за создание объекта, а надо получить id только при нажатии
AlexP
(Alex P.)
27.Февраль.2021 17:14:24
#30
Так onclick
это и есть обработчик клика, почему он сразу исполнится?
AlexP
(Alex P.)
27.Февраль.2021 17:29:37
#32
Это вызов функции внутри обработчика onclick
.
Yui
(p)
27.Февраль.2021 17:31:02
#33
И получается чтобы вывести id нам надо внутри функции прописать alert(self.id_1);
?
AlexP
(Alex P.)
27.Февраль.2021 17:43:38
#34