Настройка onClick в строке шаблона

Я работаю над установкой onClick в строке шаблона. Кнопка отображается так, как ожидалось, но при нажатии кнопки я не получаю журнал консоли, как ожидалось. По сути, я запускаю ответ сервера через анализатор и на основе того, что получаю обратно, я либо отображаю кнопку, либо тег привязки. Кнопка запускает модальное окно, а тег привязки просто перенаправит пользователя на другую ссылку.

Для простоты я просто устанавливаю здесь два результата в переменные.

const testButton = `<button onClick = "${()=> console.info('testing click')}">test</button>`;
const testAnchor = `<a href = "${passedURL}" target = "_blank">${someText}</a>`;

Тег привязки полностью работает, как и ожидалось, но кнопке onClick не нравится. Я думаю, это как-то связано с этим.

Это на стороне клиента в файле .ts.

Как вы визуализируете свою строку? По умолчанию React не поддерживает необработанный HTML.

ghybs 08.07.2024 04:03
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Код внутри атрибута onclick кнопки обычно не должен быть определением функции, а скорее кодом для выполнения. В вашем случае нажатие кнопки не вызывает функцию () => console.info('testing click'), а определяет функцию при каждом нажатии, что бессмысленно.

Вероятно, вы хотите сказать const testButton = `<button onClick = "console.info('testing click')">test</button>;.

Тем не менее, добавление обработчиков onclick таким способом не является хорошей практикой. Рассмотрите возможность создания нового элемента кнопки с использованием API-интерфейсов dom и добавления к этой кнопке прослушивателя кликов вместо описанного выше.

При работе со строками шаблона в JavaScript (или TypeScript) и добавлении прослушивателей событий, таких как onClick, прослушиватель событий не будет работать напрямую при использовании упомянутого вами подхода. Проблема возникает из-за того, что атрибут onClick в строке HTML не оценивается как функция при преобразовании строки в HTML.

Вместо этого вам следует добавить прослушиватель событий программно после того, как элемент был вставлен в DOM. Вот как вы можете этого добиться:

  1. Вставьте элемент кнопки в DOM.
  2. Выберите вставленный элемент кнопки.
  3. Добавьте прослушиватель событий к элементу кнопки.

Вот пример, демонстрирующий этот подход:

const passedURL = "https://example.com";
const someText = "Go to Example";

const testButton = `<button id = "testButton">test</button>`;
const testAnchor = `<a href = "${passedURL}" target = "_blank">${someText}</a>`;

const container = document.getElementById('container');

if (container) {
    container.innerHTML = testButton;

    const buttonElement = document.getElementById('testButton');

    if (buttonElement) {
        buttonElement.addEventListener('click', () => console.info('testing click'));
    }

    container.innerHTML += testAnchor;
}
<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Template String Example</title>
</head>
<body>
    <div id = "container"></div>

    <script src = "app.js"></script>
</body>
</html>

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