无法使用javascript设置属性

时间:2011-04-18 00:16:01

标签: javascript html setattribute

这里是我的问题,这可能是我自己非常明显和愚蠢的错误,我似乎无法注意到,我没有使用过很多javascript。 我认为这段代码非常明显,我正在显示3个.swf文件,并且根据生成3个随机数的脚本的结果,我想编辑嵌入式flash电影的“src”和“value”属性。

我尝试使用setAttribute和element.value =“ecc ..” 无效,属性保持不变

<!DOCTYPE HTML>

<html>
<head>
<title>example</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>

<body>

<script type="text/javascript">
var prereel1=Math.floor(Math.random()*25);
var reel1="flash/"+ prereel1 + ".swf";
var prereel2=Math.floor(Math.random()*25);
var reel2="flash/"+ prereel2 + ".swf";
var prereel3=Math.floor(Math.random()*25);
var reel3="flash/"+ prereel3 + ".swf";
document.getElementById("slot1").value=reel1; 
document.getElementById("slot2").setAttribute("value", reel2);
document.getElementById("slot3").setAttribute("value", reel3);
document.getElementById("eslot1").src=reel1;
document.getElementById("eslot2").setAttribute("src", reel2);
document.getElementById("eslot3").setAttribute("src", reel3);
</script>

<div id="slots">

<    object width="150" height="210">
<param id="slot1" name="movie" value="flash/1.swf">
<embed id="eslot1" src="flash/1.swf" width="150" height="210">
</embed>
</object><object width="150" height="210">
<param id="slot2" name="movie" value="flash/1.swf">
<embed id="eslot2" src="flash/1.swf" width="150" height="210">
</embed>
</object><object width="150" height="210">
<param id="slot3"  name="movie" value="flash/1.swf">
<embed id="eslot3" src="flash/1.swf" width="150" height="210">
</embed>
</object>

</div>

</body>
</html>

3 个答案:

答案 0 :(得分:2)

您的脚本位于Flash对象上方。

页面按顺序加载。一旦它到达你的脚本,它就试图找到ID为“slot1”的DOM中的对象,并且它找不到任何因为它还没有加载它们。

所以你想把你的脚本放在内容

之下
<div id="slots">

<object width="150" height="210">
<param id="slot1" name="movie" value="flash/1.swf">
<embed id="eslot1" src="flash/1.swf" width="150" height="210">
</embed>
</object><object width="150" height="210">
<param id="slot2" name="movie" value="flash/1.swf">
<embed id="eslot2" src="flash/1.swf" width="150" height="210">
</embed>
</object><object width="150" height="210">
<param id="slot3"  name="movie" value="flash/1.swf">
<embed id="eslot3" src="flash/1.swf" width="150" height="210">
</embed>
</object>

</div>

<script type="text/javascript">
var prereel1=Math.floor(Math.random()*25);
var reel1="flash/"+ prereel1 + ".swf";
var prereel2=Math.floor(Math.random()*25);
var reel2="flash/"+ prereel2 + ".swf";
var prereel3=Math.floor(Math.random()*25);
var reel3="flash/"+ prereel3 + ".swf";
document.getElementById("slot1").value=reel1; 
document.getElementById("slot2").setAttribute("value", reel2);
document.getElementById("slot3").setAttribute("value", reel3);
document.getElementById("eslot1").src=reel1;
document.getElementById("eslot2").setAttribute("src", reel2);
document.getElementById("eslot3").setAttribute("src", reel3);
</script>

或者,您可以将代码包装在onload块中。

<script type="text/javascript">
window.onload = function() {
    // code here
};
</script>

这意味着代码仅在页面加载完成后运行。然后你的flash对象将在DOM中,你可以访问它们。

答案 1 :(得分:2)

像Raynos所说的那样,你的脚本在对象实际存在之前就已经运行了。

您可以将代码封装在一个函数中,然后使用window.onload来触发该函数,即: function randomizeMovies(){   // 你的东西 }

window.onload = randomizeMovies;

答案 2 :(得分:1)

完成第一和第二个答案后,

的document.getElementById( 'slot1中')SRC = “等等”; 或者更确定的方式: document.getElementById('slot1')。setAttriibute('src',“blah”);

正如你所做的那样,无论哪种方式都有效(不能记得肯定),但后者是跨浏览器我相信(肯定)。

并且是的,javascript代码似乎仅在它访问的元素之后放置时才起作用。偶尔我看到头部元素中的东西工作,但事情不能在那里一致地工作,我还没有找到解决方案,以确保浏览器已加载页面。也许是一个while循环检查页面是否使用计时器加载,以免导致浏览器“失控脚本”错误?我今天应该修改这个概念。

(啊 - danny Goodman的书说在文档加载过程中执行的脚本应该有助于生成文档及其对象。并且他没有提供代码。所以避免onload)