Я действительно борюсь с этим - уверен, что мне не хватает чего-то простого.
Вот код: -
function webcamupdate(webcamurl) {
alert("I am a function to update the webcam with the url "+webcamurl);
}
function countdown(callback) {
alert(callback);
setTimeout("callback()", 10000);
}
var theurl = "THIS IS THE URL";
countdown(function(){ webcamupdate(theurl); });
Как видите, я пытаюсь создать функцию обратного отсчета (кода больше, однако я только что опубликовал основы), который через 10 секунд запустит функцию (в данном случае обновление веб-камеры).
Все работает нормально, если у функции нет аргументов, однако предупреждение (обратный вызов) в функции coundown возвращает следующее: -
function () {webcamupdate (theurl); }
Это, конечно, приводит к аварийному завершению сценария, когда функция веб-камеры обновляется, так как «веб-камера» не определена.
Что фактически нужно сказать (обратный вызов): -
function () {webcamupdate («ЭТО URL»); }
т.е.. он оценивает аргумент "theurl" ПЕРЕД передачей его с функцией.
Любые идеи будут высоко оценены
EDIT
Я думаю, что, возможно, я ввел вас в заблуждение тем, что использовал предупреждение, а не функцию (я просто пытался сделать это простым!)
Вот оригинальный код (все еще сокращен, но дает вам лучшее представление).
function webcamupdate(url) {
document.getElementById("cruisecam").src=url+"&rand="+Math.random();
countdown(30,"Webcam",function(){ webcamupdate(url); });
}
function countdown(currentcount,displayelement,callback) {
var displaytext;
if (currentcount == 0 ) displaytext = displayelement+" is refreshing now";
else displaytext = displayelement+" updating in "+currentcount+" seconds";
if (trackingcountdown.hasChildNodes()) clearelement("trackingcountdown");
trackingcountdown.appendChild(document.createTextNode(displaytext));
if (currentcount == 0) {
countdown(currentcount,displayelement,callback)
}
else {
currentcount--;
var countdownparameters=currentcount+',"'+displayelement+'",'+callback;
setTimeout("countdown("+countdownparameters+")", 1000);
}
}
//The function is called on window loading with
//countdown(30,"Webcam",function(){ webcamupdate(url); });
//clearelement is another function (not listed) that clears the node.
По сути, важна функция обратного отсчета - для этого требуется 3 аргумента - время обратного отсчета в секундах, элемент DOM для отображения обратного отсчета и функция, запускаемая по таймауту.
Если третий аргумент (функция) не имеет собственных аргументов - например, webcam () - работает нормально, однако, когда мы пытаемся добавить веб-камеру ("webcampic.jpg"), она не работает из-за функции, которая пытается запустить веб-камеру (url), а не веб-камеру ("webcampic.jpg").
Очевидно, что самое простое решение - просто сделать URL-адрес глобальной переменной, но это не очень хорошая практика, и я бы не стал использовать код обратного отсчета на других страницах через файл js.
помощь!