Как установить событие onclick в innerHTML?

я пытаюсь использовать innerHTML для вставки некоторых данных на html-страницу, например, ниже

for(i = 0; i < data.length; i++){
var line = data[i].split("~");

nameslist.innerHTML += '<p onClick='+userclick(line[1])+'><strong>' + line[0] + ' </strong></p>';

}

но событие onclick запускается автоматически сразу после вставки, и оно не срабатывает, когда я нажимаю на элемент <p>

как мне правильно использовать innerhtml, чтобы добавить элемент p с событием onclick и запускать его только при нажатии пользователем?

Вы вызываете функцию, а не присваиваете содержимое атрибуту. Просто поместите его в строку. '<p onClick = "userclick(line[1])">

Randy Casburn 20.06.2019 16:42
Не!. Смешивание строк для создания JS, встроенного в HTML внутри JS-программы, — это ночная метка. Вместо этого используйте методы DOM, такие как createElement, appendChild и addEventListener. Это более подробно, но много легче поддерживать.
Quentin 20.06.2019 16:43

Я думаю, это будет зависеть от того, какой вариант ES вам нужно использовать с точки зрения использования строк шаблона или функций стрелок. Вы всегда можете использовать setAttribute позже. developer.mozilla.org/en-US/docs/Web/API/Element/setAttribut‌​e

rpivovar 20.06.2019 16:44
<p> элементы не предназначены для интерактивности. Вы можете добавить к ним обработчик события щелчка, но затем кто-то приходит и не может использовать мышь, но не может сфокусировать <p>, потому что он не предназначен для управления пользовательским интерфейсом. Используйте соответствующие элементы (например, <button>).
Quentin 20.06.2019 16:44

о, это хорошая мысль @Quentin

rpivovar 20.06.2019 16:45

@rpivovar - setAttribute является частью стандарта DOM, а не EcmaScript. Использовать это в сочетании с innerHTML будет… сложно. Сначала вам нужно получить ссылку на новый элемент…

Quentin 20.06.2019 16:47

Правда, это не будет элегантно, но сработает.

rpivovar 20.06.2019 16:49

@Квентин попробовал кнопку, но она не срабатывает nameslist.innerHTML += '<button onclick = "userclick(' + line[1] + ')"><strong>' + line[0] + ' </strong></button>';

DelphiStudent 20.06.2019 16:53

@DelphiStudent — прочитайте мой первый комментарий. Вы не последовали совету, который я дал там. (Вы также не указали минимальный воспроизводимый пример)

Quentin 20.06.2019 16:54

@Quentin хорошо, я буду работать с прослушивателем событий.

DelphiStudent 20.06.2019 17:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
10
956
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите использовать другой подход, вы можете добавить прослушиватель событий к родительскому узлу и позволить событию клика подняться к родителю.

Пример можно найти здесь: https://davidwalsh.name/event-delegate

// Get the element, add a click listener...
document.getElementById("parent-list").addEventListener("click", function(e) {
    // e.target is the clicked element!
    // If it was a list item
    if (e.target && e.target.nodeName == "LI") {
        // List item found!  Output the ID!
        console.info("List item ", e.target.id.replace("post-", ""), " was clicked!");
    }
});

я принимаю этот ответ, поскольку он относится к использованию прослушивателя событий, как прокомментировал @Quentin

DelphiStudent 20.06.2019 17:24

Другие вопросы по теме