Как объединить несколько функций копирования в буфер обмена?

Я пытаюсь понять, как скопировать несколько кнопок «Копировать в буфер обмена» в один скрипт.

На моей странице есть динамические текстовые области, которые заполняются по мере того, как пользователь заполняет форму, и каждая текстовая область имеет собственную кнопку копирования в буфер обмена:

function CopyTemplateField1() {
  var copyText = document.getElementById("TemplateField1");
  copyText.select();
  navigator.clipboard.writeText(copyText.value);
}

function CopyTemplateField2() {
  var copyText = document.getElementById("TemplateField2");
  copyText.select();
  navigator.clipboard.writeText(copyText.value);
}

function CopyTemplateField3() {
  var copyText = document.getElementById("TemplateField3");
  copyText.select();
  navigator.clipboard.writeText(copyText.value);
}
<tr>
  <td><textarea id = "TemplateField1"></textarea></td>
  <td><img src = "copybutton.png" onClick = "CopyTemplateField1();"></td>
</tr>

<tr>
  <td><textarea id = "TemplateField2"></textarea></td>
  <td><img src = "copybutton.png" onClick = "CopyTemplateField2();"></td>
</tr>

<tr>
  <td><textarea id = "TemplateField3"></textarea></td>
  <td><img src = "copybutton.png" onClick = "CopyTemplateField3();"></td>
</tr>

Я по-прежнему хочу, чтобы каждая кнопка копирования копировала текст из связанной текстовой области, но три отдельные функции были объединены в одну функцию, которая будет различать, какая кнопка нажата, и копировать этот текст в буфер обмена.

Я пытался использовать if/else, но продолжал выдавать ошибки. Искал похожие статьи, но не нашел ничего подходящего. Если есть другой метод, но вы предпочитаете использовать JavaScript, поскольку страница довольно упрощена.

Вместо получения текстового поля по идентификатору выберите его из структуры разметки. Что-то вроде txtarea = e.target.closest('tr').firstElementChild.firstElementChild;. Вам необходимо передать объект event обработчикам событий. А лучше используйте addEventListener , чтобы прикрепить события, см. также делегирование событий, чтобы упростить код.

Teemu 03.05.2024 09:40

Используйте параметры функции: onClick = "copyValue('TemplateField2');"

Bergi 03.05.2024 09:55

Почему вы использовали Function с заглавной буквой F? Я удивлен, что это работает на вашей стороне. Мне пришлось отредактировать его на function, чтобы фрагмент работал.

Randy 03.05.2024 11:27

Обратите внимание, что navigator.clipboard.writeText(copyText.value) заблокирован при stackoverflow, поэтому фрагмент не будет работать таким образом. Вместо этого вы можете найти элемент textarea и попытаться textarea.select(); document.execCommand('copy'); воспроизвести его здесь. navigator.clipboard.writeText() требует более безопасного контекста, чем фрагменты на Stackoverflow, и является современным и лучшим подходом.

Randy 03.05.2024 11:29
Поведение ключевого слова "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
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Использование параметров функции кажется лучшим вариантом.

<tr>
  <td><textarea id = "TemplateField1"></textarea></td>
  <td><img src = "copybutton.png" onClick = "CopyTemplateField(1);"></td>
</tr>

<tr>
  <td><textarea id = "TemplateField2"></textarea></td>
  <td><img src = "copybutton.png" onClick = "CopyTemplateField(2);"></td>
</tr>

<tr>
  <td><textarea id = "TemplateField3"></textarea></td>
  <td><img src = "copybutton.png" onClick = "CopyTemplateField(3);"></td>
</tr>
function CopyTemplateField(n) {
  var copyText = document.getElementById("TemplateField" + n);
  copyText.select();
  navigator.clipboard.writeText(copyText.value);
}

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