这里是我的问题,这可能是我自己非常明显和愚蠢的错误,我似乎无法注意到,我没有使用过很多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>
答案 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)