Поскольку литералы должны быть указаны .
Вы не можете просто написать:
onclick="sendEmail(bob@example.com)"
Этот быстрый и грязный подход заключается просто в добавлении пары '
к данным, но это предполагает, что выиграл ' Не может быть проблем с данными c (например, включая '
, "
или новые строки).
Вам следует:
- Кодировать данные как JSON, поэтому это действительный JavaScript литерал
- Кодировать специальные символы в HTML, чтобы они не вызывали HTML проблем с синтаксическим анализом
например
const email = data.email;
const js_safe_email = JSON.stringify(email);
const html_safe_email = js_safe_email
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
icon2 = '<center><button type="button" class="btn btn-info m-btn m-btn--icon m-btn--icon-only btn-sm" ' +
'data-toggle="m-tooltip" title="" onclick="sendEmail('+html_safe_email+')" data-placement="top" data-original-title="' + 'Send Email' + ' "> <i class="la la-envelope"></i></button>';
Это довольно ужасно, но то же самое происходит с объединением строк данных, встроенных в JS, встроенных в HTML. Обычно лучше использовать методы DOM.