単純な「getElementsByClass」関数を使用してフォーム上の要素をループする際に問題があります。この見出しを使用する必要があります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
また、IE8を使用する必要があります。
見出しを削除すると、関数は正常に動作します。誤ったタグが正しい場所にないことに気付きましたが、それらを削除すると、関数も正しく機能します。このページには他にもたくさんありますが、簡略化したバージョンを次に示します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
function getElementsByClass(node,searchClass,tag) {
var classElements = new Array();
var els = node.getElementsByTagName(tag); // use "*" for all elements
var elsLen = els.length;
alert("elsLen: " + elsLen);
var pattern = new RegExp("\\b"+searchClass+"\\b");
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
alert("getElementsByClass: classElements.length: " + classElements.length);
return classElements;
}
</script>
</head>
<body>
<table>
<form name="formOne">
<input type="button" value="click" onclick="getElementsByClass(document.formOne,'popupElement','*');" />
<input type="text" class="popupElement">
</form>
<form name="formTwo">
<table>
<input type="text" class="popupElement">
<input type="text" class="popupElement">
<input type="button" value="click2" onclick="getElementsByClass(document.formTwo,'popupElement','*');" />
</form>
formOne での getElementsByClass() への最初の呼び出しが正しく実行され、アラート ボックスに適切な値が表示されます。しかし、formTwo の呼び出しでは、関数はフォーム上の要素を見つけません。
回避策を開発できるように、なぜこれが発生するのかを正確に理解しようとしています。