1

可能重复:
为什么 jQuery 或诸如 `getElementByID` 之类的 DOM 方法找不到元素?

在 HTML 标记之前,我运行了一些 php 代码。在此期间,我需要包含一些 javascript 行,例如

..php code...
..javascript code...
..php code..
<html>
<head>
</head>
<body>
<input type="file" name="file" id="file">
</body>
</html>

在 javascript 代码中,我想隐藏文件元素。

这没有任何作用:

..php code
?>
<SCRIPT LANGUAGE="JavaScript">
 document.getElementById('file').style.display = 'none';
</script>
<?php

...php代码

如果我在那里发出警报,则会显示

如果我将该行放入<head></head>块中的一个函数中并从例如按钮的 onClick 事件中调用它,则文件元素将被隐藏,因此该行很好。也许document.getLementByID在 html 标签之外是无效的?或者问题可能是页面尚未加载,因此没有具有该 ID 的元素?如果是这种情况,我该怎么办?

解决方案

我在 php 代码中添加了一个变量 $int = 1; (和 $int = 0; 其他地方,但仍然在页面加载之前)。然后在<head></head>块中:

window.onload = selectChoose;
function selectChoose() 
{
    if (<?php echo $int ?> == 0) {
        showChoose();
    }
    else {
        hideChoose();
    }
}

function showChoose() 
{
    document.getElementById('file').style.display = 'inline';
}

function hideChoose() 
{
    document.getElementById('file').style.display = 'none';
}
4

2 回答 2

2

就像你说的那样,它只是还没有加载。

影响特定元素的 JavaScript 必须被延迟(window.onload在事件​​处理程序上,等等),或者放在它试图修改的元素之后。

于 2013-01-02T20:35:15.770 回答
2

Window onload 将为您解决这个问题。像这样:

window.onload = function(){
     document.getElementById('file').style.display = 'none';
    }

这意味着一旦加载了整个站点then,它将执行 style.display 命令:)

于 2013-01-02T20:39:07.307 回答