2011-01-29 73 views
1

我使用的CodeIgniter 2.0,我想改变我的div的内容与Javascript,但我似乎无法“获得”它。这里是一个精简版来证明我的问题:Javascript getElementByID

我的控制器:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Index extends CI_Controller { 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function index() 
    { 
     $this->load->view('index.php'); 
    } 
} 
/* End of file index.php */ 
/* Location: ./application/controllers/index.php */ 

笔者认为:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title><?php echo $this->config->item('app_name'); ?> : Welcome!</title>  
<script type="text/javascript"> 

function returnObjById(id) 
{ 
    if (document.getElementById) 
     var returnVar = document.getElementById(id); 
    else if (document.all) 
     var returnVar = document.all[id]; 
    else if (document.layers) 
     var returnVar = document.layers[id]; 
    return returnVar; 
} 

alert('fetching moonstarttime : ' + returnObjById('moonstarttime') ); 

</script> 
</head> 
<body> 

<div id="moonstarttime" name="moonstarttime" >I want this</div> 

</body> 
</html> 

但是在页面加载时,我总是fetching moonstarttime : null。我试过Chrome和IE,我在这里做错了什么?

回答

3
window.onload = function(){ 
function returnObjById(id) 
{ 
    if (document.getElementById) 
     var returnVar = document.getElementById(id); 
    else if (document.all) 
     var returnVar = document.all[id]; 
    else if (document.layers) 
     var returnVar = document.layers[id]; 
    return returnVar; 
} 
alert('fetching moonstarttime : ' + returnObjById('moonstarttime') ); 
} 

或者只是把你的脚本是用了关闭标记之前assing的window.onload之前。

+0

谢谢,我不知道的JavaScript支持嵌套函数 – 2011-01-29 17:29:58

3

您正在页面的标题中运行脚本,因此它在主体加载之前运行。你不能到达元素,因为它还不存在。

将脚本放在元素之后,或者将其放入函数中,然后从主体的onload事件中调用该函数。

1

我认为正在发生的是,您正试图在DOM完全加载之前检索元素(注意您的代码选择元素是在您想要获取的项目之前)。如果你在有问题的元素之后运行你的代码,你应该得到它的引用。

顺便说一句,像jQuery JavaScript库真正帮助你做到这一点的提升,并配有辅助函数ready()more info here),使得确保该网页已被加载和初始化DOM后,才执行代码。

0

正如其他人所提到的,您的函数在构建DOM树之前正在运行。

如果你不想等onload函数,因为它可以等待很长时间,如果你加载了很多图像,例如,那么你可以看看在这里使用注释(5),这可能会加快您网页的响应速度明显。

http://dean.edwards.name/weblog/2006/06/again/

如果你把你的代码<body>元素之后,把你会被罚款也延迟。 所以,这里所描述你可以使用setTimeouthttp://www.w3schools.com/js/js_timing.asp,并有类似:

setTimeout((function returnObjectById(name) { ... })(), 30);

这会从30毫秒延时运行功能。

0

我会建议使用jQuery。这将消除对if..elseif的需求,并且不需要测试所有类型的浏览器功能。

jQuery中:

简单地做这个调用:

<script type="text/javascript"> 
    $(document).ready(function() { 

    alert('fetching moonstarttime : ' + $('#moonstarttime') ); 

    } 
</script>