Как получить конкретный инкрементный ID?
Всем привет!Я плохо дружу с JavaScript, поэтому искренне надеюсь, что много камней не будет в мою сторону)) У меня появилась проблема, с которой я уже очень долго пытаюсь справиться, но тщетно. На просторах интернета( возможно и этого сайта в том числе) я собрал код, который возращает набор символов(допустим пароль)! Всё это добро выводится на страницу HTML, где так же есть кнопка, которую я долго искал и тестил. Она единственная, которая заработала =). Я упростил код, что бы акцентировать внимание на проблеме.
<script>
//функция обработки нажатия кнопки(работает вроде исправно)
function copyToClipboard() {
const str = document.getElementById(num).innerText;
const el = document.createElement('textarea');
el.value = str;
el.setAttribute('readonly', '');
el.style.position = 'absolute';
el.style.left = '-9999px';
document.body.appendChild(el);
el.select();
document.execCommand('copy');
document.body.removeChild(el);
}
//функция для генерации пароля
var nam;
var num=0;
var f=5;
do{ num++;
function pass() {
var words1 = ["aA","bB"];
var words2 = ["cC","dD"];
var words3 = ["eE","fF"];
var words4 = ["gG,"hH"];
var words5 = ["iI","jJ"];
var words6 = ["kK","lL"];
var rand1 = Math.floor(Math.random() * words1.length);
var rand2 = Math.floor(Math.random() * words2.length);
var rand3 = Math.floor(Math.random() * words3.length);
var rand4 = Math.floor(Math.random() * words4.length);
var rand5 = Math.floor(Math.random() * words5.length);
var rand6 = Math.floor(Math.random() * words6.length);
var total = words1[rand1] + "</br>" + words2[rand2] + "</br>" + words3[rand3] + "</br>" + words4[rand4] + "</br>" + words5[rand5]+ "</br>" + words6[rand6];
document.write(num+"."+"<div id="+num+">"+total+"</div>"+"<button onclick='copyToClipboard()' id='k"+num+"'>Скопировать</button><hr>");
}
pass();
} while (num<f);
</script>
А теперь по-подробнее. При генерации через рандом,я получаю набор символов, которые хочу сохранить. Для этого и добавлена кнопка. Да, можно всегда обойтись Ctrl+C, но так умеют далеко не все, да и с телефона не очень то удобно, особенно с моего, божеупаси)). Таким образом, кнопка вызывает функцию, которая нацелена на DIV с id=num. Вроде бы нельзя начинать название div с цифры, но кнопка по-прежнему работает(это конечно легко исправить, но проблема то в другом)
СУТЬ ПРОБЛЕМЫ: Так вот! На выходе у меня 5 штук наборов букв. Нажимая на любую кнопку Скопировать(их тоже 5!) - она копирует непременно последний набор- что логично, так как num имеет значение 5. Как мне связать кнопку, например, для 3 набора символов, что бы именно это и было скопировано?
Я пробовал эксперементировать с самой функцией, добавлял её в разные части кода, не работает. Я искал решения в интернете, а так же копался в справочнике, ничего не нашёл. Как видите, я добавил счётчик кнопке, что вроде бы не обязательно, вроде первой переменной, которую я собирался задействовать, но это было частью предполагаемого решения.
Мне кажется решение где-то рядом, но моего знания JavaScript не хватает на него. Можете ли вы мне помочь?
Простите за многобуков)
Ответы (1 шт):
Во-первых, у вас отпечатка ["gG, т.е отсутсвует закрывающая кавычка. Во-вторых, чтобы копировать каждую строку по отдельноcти, то вам необходимо передать значение num в copyToClipboard
//функция обработки нажатия кнопки(работает вроде исправно)
function copyToClipboard(num) {
const str = document.getElementById(num).innerText;
const el = document.createElement('textarea');
el.value = str;
el.setAttribute('readonly', '');
el.style.position = 'absolute';
el.style.left = '-9999px';
document.body.appendChild(el);
el.select();
document.execCommand('copy');
document.body.removeChild(el);
}
//функция для генерации пароля
var nam;
var num=0;
var f=6;
do{ num++;
function pass() {
var words1 = ["aA","bB"];
var words2 = ["cC","dD"];
var words3 = ["eE","fF"];
var words4 = ["gG","hH"];
var words5 = ["iI","jJ"];
var words6 = ["kK","lL"];
var rand1 = Math.floor(Math.random() * words1.length);
var rand2 = Math.floor(Math.random() * words2.length);
var rand3 = Math.floor(Math.random() * words3.length);
var rand4 = Math.floor(Math.random() * words4.length);
var rand5 = Math.floor(Math.random() * words5.length);
var rand6 = Math.floor(Math.random() * words6.length);
var total = words1[rand1] + "</br>" + words2[rand2] + "</br>" + words3[rand3] + "</br>" + words4[rand4] + "</br>" + words5[rand5]+ "</br>" + words6[rand6];
document.write(num+"."+"<div id="+num+">"+total+"</div>"+"<button onclick='copyToClipboard("+num+")' id='k"+num+"'>Скопировать</button><hr>");
}
pass();
} while (num<f);