не могу установить атрибут с помощью JavaScript - PullRequest
0 голосов
/ 18 апреля 2011

ну вот моя проблема, это, наверное, моя собственная очень очевидная и глупая ошибка, которую я не могу заметить, я не очень много работал с javascript. Я думаю, что этот код довольно очевиден, я отображаю 3 файла .swf, и в зависимости от результата скрипта, который генерирует 3 случайных числа, я хочу отредактировать атрибуты «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 ]

2 голосов
/ 18 апреля 2011

Как сказал Рейнос, ваш сценарий работает до того, как объекты действительно появятся.

Вы можете инкапсулировать свой код в функцию, а затем использовать window.onload для запуска этой функции, то есть: function randomizeMovies () { // ваши вещи }

window.onload = randomizeMovies;

2 голосов
/ 18 апреля 2011

Ваш скрипт размещен над флеш-объектами.

Страница загружается по порядку.Как только он дошел до вашего сценария, он попытался найти объект в DOM с идентификатором «slot1» и не нашел ни одного, потому что еще не загрузил их.

Итак, вы хотите взять свой сценарий и поместить егониже содержимого

<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>

Это означает, что код запускается только после завершения загрузки страницы.Тогда ваши флэш-объекты будут в DOM, и вы сможете получить к ним доступ.

1 голос
/ 18 апреля 2011

после того, как вы завершите выполнение ответов один и два,

document.getElementById ('slot1'). Src = "blah";или более верный способ: document.getElementById ('slot1'). setAttriibute ('src', "blah");

, как вы сделали, в любом случае работает (точно не помню), нопоследний является кросс-браузерным, я считаю (определенно).

и да, код javascript, кажется, работает только тогда, когда он помещен после элементов, к которым он обращается.время от времени я видел, как что-то работает в элементе head, но там не все работает согласованно, и я пока не нашел решения, чтобы гарантировать, что браузер загрузил страницу.может быть, цикл while проверяет, что страница загружается с использованием таймера, чтобы не вызывать ошибки браузера "runaway script"?Сегодня мне следует поработать с этой концепцией.

(ах - в книге Дэнни Гудмена говорится, что сценарии, которые выполняются во время загрузки документа, должны способствовать созданию документа и его объектов. И он не дает для этого кода. Поэтому избегайте загрузки)

...