Я создаю элемент 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)});
2 ответа
На самом деле вы можете использовать атрибут onclick, просто назначьте его с помощью setAttribute
следующим образом:
var son = document.createElement("p");
var node = document.createTextNode("test");
son.appendChild(node);
son.className = "son-class";
son.id="son-id";
son.setAttribute('onclick', 'sonFunction()');
var father = document.getElementById("test-div");
father.appendChild(son);
function sonFunction() {
alert(event.srcElement.id);
}
<div id="test-div">
Вы пытаетесь изменить атрибут onclick
, который ожидает строку, и присваиваете ей возвращаемое значение вашей sonFunction
, которая не имеет возвращаемого значения, следовательно ( недействительный код > ) .
Вы можете установить атрибут 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). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.