<p>, </p>
タグの間に置かれたすべてのテキストを書き込むはずのjavascript関数 'doAll'があります。私のコードでは、2つの方法で使用されています。Javascript関数が予期しない動作をする
ページの最後で呼び出すと正しく動作します。ただし、クリック・ボタン・イベントが発生したときにもトリガーする必要があります。なんらかの理由で、今度は何をするのでしょうか?ボタンをクリックすると、最初の<p>...</p>
html要素の内部htmlが出力されます。
私の質問は、これらの2つの状況で異なる動作をする理由と、この問題を解決するためにどうすればよいかということです。ここで
<!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>
は、 '出力' です:
XXX
YYY
YYY
XXX
XXX
YYY
YYY
XXX
そして、ここではどのような1缶ですボタンをクリックすると表示されます:
XXX
なぜ第1の出力は、8行で構成されていますか?クリックしたように見えるものは早い段階で実行されます。 –
覚えておいてください: 'debugger' +ブラウザ開発ツールは常にあなたの友人です。 – DontVoteMeDown
@LarsEbert:いいえ、それはクリックボタンのためではありません。 4行の追加出力は、コードの最後の6行の結果です。あなたが見ることができるように、doAll関数は、コードの最後のセクションによって自動的にトリガされます。 –