我正在修改现有的遗留网页(我不应该修改现有的部分,而是添加),网页使用document.write来编写某些html元素。当我使用
<script type="text/javascript" language="javascript">
var v = document.getElementById('td_date_cal_0');
alert(v);
</script>
v变为null,当我创建按钮并单击
时<input type="button" id="mnbutton" onclick="mnLoader();" value="Click Me!" />;
<script type="text/javascript" language="javascript" >
function mnLoader() {
var v = document.getElementById("td_date_cal_0");
alert(v);
} <br />
</script>
任何想法,如何在不需要用户操作的情况下获取元素,例如单击?
谢谢, EBE
答案 0 :(得分:8)
尝试将脚本附加到onload
或document
的{{1}}事件。
window
答案 1 :(得分:1)
我猜你要把你的脚本元素放在你想要的元素之前。
解决此问题的最简单方法是将脚本元素放在body元素的END标记之前。
答案 2 :(得分:1)
我预计会发生这种情况,因为脚本在创建ID为“td_date_cal_0”的元素之前运行。
尝试将脚本移动到它正在操作的元素下面,或者将代码连接到document.onload事件。
答案 3 :(得分:0)
@Mathias举了一个很有可能解决问题的例子。您尝试使用document.getElementById尝试访问的元素在您尝试时尚未加载到DOM中。
但是,如果您对能够尽早运行代码感兴趣,更好的解决方案是观察“dom:loaded”事件或DOM ready事件。这比调用 window.onload 更复杂,但Prototype.js或jQuery等框架可以提供帮助。
请参阅this page,其中Michael Sharman谈到了这个特色。
然后您可以编写如下代码:
document.observe(document, 'dom:loaded', initFunction);
function initFunction()
{
// this code will run as soon as DOM is loaded,
// but before any images are loaded
}
显然,如果您不想使用框架,您可以仅使用标准的javascript调用来复制行为,但您必须准备好处理浏览器之间的差异。您可以先查看 onreadystatechanged 事件以及其他浏览器的类似事件(例如 DOMContentLoaded )
答案 4 :(得分:0)
以下代码正常工作。
<input type="text" id="xxxx"/>
<input type="button" id="mnbutton" onclick="mnLoader();" value="Click Me!" />;
<script>
function mnLoader() {
var v = document.getElementById("xxxx").value;
alert(v);
}
</script>