質問の前に解決策を知りたい方へ:
1 ) 実際に作成される前に getElementById() で要素を読み取らないでください: windows.onload を参照してください。
2) XMLHTTPRequest と AJAX を使用している場合は、コールバック (xhr_object.readyState == 4 リクエストの一部) で getElementById() を呼び出すか、この関数のロックを解除します。
私の場合、目的のコールバックを使用せずにページを呼び出します (noobish Ctrl-C Ctrl-V スタイル)。
質問は次のとおりです。
HTML/Javascript コードで奇妙なケースに直面しています。このコードの目的は、JS 関数を介して HTML 入力 (テキスト型) の値を取得することです。
コンテキストは、メインの HTML ページがすべての JS 関数をロードし、HTTPRequest を介してサブ div の HTML コンテンツをオンデマンドでロードすることです。
選択したコードは、div が読み込まれた後に呼び出されます。
私が読む必要があるPHP生成の入力フィールドは次のとおりです。
<input id="listejf" type="text" value="6|7|">
これが私のJavaScript呼び出しです:
listejf=document.getElementById('listejf').value;
alert(listejf);
このコードは機能しません。Firebug は私に送信します:
TypeError: document.getElementById("listejf") が null です
奇妙なことに、次のようにgetElementById
スルーを呼び出すと、機能させることができます。alert
alert(document.getElementById("listejf"));
listejf=document.getElementById('listejf').value;
alert(listejf);
最初は がalert
表示されますnull
が、2 番目は予想どおり「6|7|」と表示されます。
さて、2つの質問:
- アラートが機能するのはなぜですか?
- どこにでもアラートをスローせずに機能させるにはどうすればよいですか?
再編集、コードはなくなっていました:
これがメインの HTML ページです: main.html
<head>
<script type="application/javascript" src="./preload.js"></script>
</head>
<body>
<a href="#" onCLick="CallPagen()">Link</a>
<div id="targetid"></div>
</body>
preload.js は次のようになります。
function CallPagen() {
envoieRequete('./PageN.php', 'targetid');
}
function mytestfunction() {
listejf = document.getElementById('listejf').value;
alert(listejf);
}
function envoieRequete(url, id) {
var xhr_object = null;
if (window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
else if (window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
xhr_object.open("GET", url, true);
xhr_object.onreadystatechange = function () {
if (xhr_object.readyState == 4) {
if (!document.getElementById(id)) {
alert("id pas trouvé " + id);
}
document.getElementById(id).innerHTML = xhr_object.responseText;
mytestfunction();
}
};
xhr_object.send(null);
}
PageN.php は、値が入力された状態で inputtext フィールドをエコーするだけです。