Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Копирование текста по клику JavaScript

Gray Otmorozok Ученик (112), на голосовании 1 год назад
   function copyClipboard(text) {
return navigator.clipboard.writeText(text);
}

ipLink.addEventListener('click', copyClipboard(ipLink.textContent));

Вот такая функция для копирования текста при клике. Но есть одно НО. Когда я захожу на сайт, текст уже находится в буфере обмена, почему так происходит? как исправить?
Голосование за лучший ответ
FooFaa me Ученик (248) 1 год назад
Причина такого поведения кроется в том, как вы написали слушатель события click.

В строке ipLink.addEventListener('click', copyClipboard(ipLink.textContent)); вы фактически сразу вызываете функцию copyClipboard и передаете ее возвращаемое значение в addEventListener в качестве функции обратного вызова. Это означает, что текст будет скопирован в буфер обмена сразу после выполнения сценария, а не после щелчка по ссылке.

Чтобы исправить это, необходимо передать ссылку на функцию copyClipboard в addEventListener, а не вызывать ее. Это можно сделать с помощью анонимной функции, вызывающей copyClipboard и передающей ее в addEventListener:
 ipLink.addEventListener('click', function() { 
copyClipboard(ipLink.textContent);
});
При таком изменении текст будет копироваться в буфер обмена только при нажатии на ссылку
Похожие вопросы