对于那些在问题之前想要解决方案的人:
1) 在真正创建之前不要使用 getElementById() 读取元素:参见 windows.onload。
2 ) 如果你使用 XMLHTTPRequest 和 AJAX 的东西,调用你 getElementById() ,或者解锁这个函数,在回调中,(xhr_object.readyState == 4 部分你的请求)。
在我的情况下,我调用我的页面而不使用所需的回调(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 发给我:
类型错误:document.getElementById("listejf") 为空
getElementById
奇怪的是,如果我这样调用它,我可以让它工作alert
:
alert(document.getElementById("listejf"));
listejf=document.getElementById('listejf').value;
alert(listejf);
第一个alert
显示null
,但第二个显示“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 字段。