Я создаю элемент 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)});
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
});
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.