Хорошо, я думаю, вы хотите, чтобы определенный текст, каким-то образом связанный с определенной кнопкой, «печатался» в тегах h1, как пишущая машинка. Дайте мне знать, если это что-то еще. Если это так, вам нужно добавить параметры к функции вместо того, чтобы определять ее дважды, как показано ниже:
function doTheTyping(id, txt) {
var speed = 80;
var i = 0
var el = document.getElementById(id);
function typeWriter() {
if (i < txt.length) {
el.innerHTML += txt.charAt(i);
i++;
setTimeout(typeWriter, speed);
}
}
if(el) typeWriter();
}
$button1.onclick = function() {
doTheTyping("button1", "button 1");
};
$button2.onclick = function() {
doTheTyping("button2", "button 2");
};
<div id="container">
<h1>name</h1>
<button style="font-size:25px" id="$button1">button number
1</button>
<button style="font-size:25px" id="$button2">Button number 2</button>
<h1 id="button1"> l </h1>
<h1 id="button2"> 2 </h1>
<h3 style="color:white;"></h3>
</div>
параметр подобен переменной, которая изменяется для каждой функции. Обратите внимание, что теперь есть родительская функция doTheTyping, у которой все переменные (особенно i) сброшены, и внутри этой функции запускается setTimeout (и увеличивается i), но до того, как i увеличивался одной из кнопок, и к тому времени, когда это было сделано, другие уже не работали.
Раньше проблема заключалась в том, что одни и те же переменные определялись дважды. Если функция или переменная имеет то же имя, что и другая, ее необходимо переименовать, если для нее ожидается другой результат, или ее можно свести к одной функции, которая может иметь другое поведение в зависимости от параметры.
Еще я заметил, что самим кнопкам были присвоены идентификаторы, но они никогда не использовались, поэтому в целом события onclick были перемещены в тег JavaScript, чтобы придать некоторую гибкость, вместо того, чтобы иметь все в кавычках на самой странице HTML Дайте мне знать, если у вас есть какие-либо вопросы