Mam funkcję javascript "doAll", która ma napisać cały tekst, który został umieszczony między tagami <p>, </p>
. W moim kodzie jest on używany na dwa sposoby.Funkcja JavaScript działa w nieoczekiwany sposób
Działa poprawnie, gdy po prostu nazywam to na końcu strony. Jednak należy go również uruchomić, gdy nastąpi zdarzenie typu "kliknij przycisk". Z jakiegoś powodu nie robi to, co ma robić tym razem. Po jednym kliknięciu przycisku po prostu drukuje wewnętrzny html pierwszego elementu html o nazwie <p>...</p>
.
Moje pytanie brzmi: dlaczego w tych dwóch sytuacjach działa inaczej i co należy zrobić, aby rozwiązać ten problem.
<!DOCTYPE html>
<html>
<head>
<script>
function returnList(x)
{
return document.getElementsByTagName(x);
}
function writeList(x)
{
var i = 0;
while (x[i])
{
document.write(x[i++].innerHTML + '<br/>');
}
}
function doAll(x)
{
writeList(returnList(x));
}
</script>
</head>
<body>
<p>XXX</p>
<p>YYY</p>
<div style = 'background-color: gray;'>
<p>YYY</p>
<p>XXX</p>
</div>
<button type = 'button' onclick = "doAll('p')">
Click me!
</button>
<script>
document.write('<br/>');
doAll('p');
</script>
</body>
</html>
Oto 'wyjście':
XXX
YYY
YYY
XXX
XXX
YYY
YYY
XXX
A oto co można zobacz po kliknięciu przycisku:
XXX
Dlaczego pierwsze wyjście składa się z 8 linii, chociaż istnieją tylko 4 p-tagi? wygląda na to, że kliknięcie jest uruchamiane wcześniej. –
Pamiętaj: 'debugger' + narzędzia do tworzenia przeglądarki są zawsze Twoimi przyjaciółmi. – DontVoteMeDown
@LarsEbert: nie, nie jest to spowodowane kliknięciem przycisku. Cztery dodatkowe linie wyjścia są konsekwencją sześciu ostatnich linii mojego kodu: D. Jak widać funkcja "doAll" jest automatycznie wyzwalana przez sekcję na dole kodu. –