Я создаю элемент p внутри div (давайте назовем его «test-div»), и я хочу добавить к нему события onclick, я могу дать ему класс и идентификатор, но я получаю ошибки при добавлении onclick. Он говорит, что имеет тип void. Мой код в основном таков:

var son = document.createElement("p");
var node = document.createTextNode("test");
son.appendChild(node);
var father = document.getElementById("test-div");
father.appendChild(son);
son.className = "son-class";
son.id="son-id";
son.onclick= sonFunction(randomVar); //Type 'void' is not assignable error

Ответ: son.addEventListener("click", function(){sonFunction(randomVar)});

0
hanuruh 24 Окт 2019 в 19:09
1
 – 
Prerak Sola
24 Окт 2019 в 19:11

1 ответ

Вы пытаетесь изменить атрибут onclick, который ожидает строку, и присваиваете ему возвращаемое значение вашего sonFunction, которое не имеет возвращаемого значения, следовательно (void).

Вы можете установить атрибут onclick с помощью строки, например:

son.onclick = 'sonFunction(randomVar);';

Это даст вам вывод HTML, похожий на:

<p class="son-class" onclick="sonFunction(randomVar);">
    ...
</p>

Однако вы, вероятно, захотите назначить ему прослушиватель событий, который будет запускать событие при нажатии. Выполнение приведенных ниже действий не добавит атрибут onclick в HTML, но сохранит прослушиватель в компиляторе Javascript. Это часто называют «ненавязчивым» Javascript, поскольку код Javascript не встроен в HTML.

function sonFunction() {
    // something here
};
son.addEventListener('click', sonFunction);

Или же

son.addEventListener('click', function () {
    // something here
});
0
chadiusvt 24 Окт 2019 в 19:26
1
Son.onclick = 'sonFunction (randomVar);'; это неправильно, на самом деле это то, что я пробовал в первый раз, я искал в stackoverflow, и вы на самом деле не помещаете это в строку. при выполнении son.addEventListener('click', sonFunction(randomVar)); я также получаю ошибку и то же самое для son.addEventListener('click', function (randomVar) {});
 – 
hanuruh
24 Окт 2019 в 23:56