Изменение кода на лету
подскажите синтаксис написания кода если имена переменных хранятся в других переменных?)
|
Если переменные глобальные
var a = 1; var name = 'a'; alert(window[name]); |
спасиб)
а если например есть поле ввода id=input1 то обращатбься из кода все равно window['input1'] ? или document (попробовал, работает с window) |
К элементу с установленным id следует обращаться через document.getElementById('id');
|
Вопрос по сложнее
Уважаемые господа!
Столкнулся с такой задачей: Есть таймер обратного отсчета на javascript заданный setTimeout(function(),1000); При нажатии на кнопку обновить я прибавляю к таймеру 120 секунд, то есть останавливаю предыдущий таймер clearTimeout(timer_id) и создаю новый setTimeout(function(+120),1000) Так вот вопрос, JS клиентский язык, то есть при нажатии на кнопку таймер изменится только у меня. Как же сдалать так, чтобы таймер менялся не только на моем клиенте, но и на всех остальных клиентах, на данном этапе сидящих на этой же странице. И более мелкий вопрос clearTimeout(id) - прикольная функция, так как словить идэшник сложно, как же можно вообще убить тимер, чтобы он из памяти улетел. Заранее благодарен. |
Цитата:
По таймеру: рассылайте через сервер сообщения остальным клиентам. Конкретная реализация зависит от конкретной задачи. |
function StartCountDown() { myDiv = 'timer1'; myTargetDate = '2009/11/05 20:00:00' var dthen = new Date(myTargetDate); var dnow = new Date(); ddiff = new Date(dthen-dnow); gsecs = Math.floor(ddiff.valueOf()/1000); CountBack(myDiv,gsecs); } function Calcage(secs, num1, num2) { s = ((Math.floor(secs/num1))%num2).toString(); if (s.length < 2) { s = "0" + s; } return (s); } function CountBack(myDiv, secs) { var parsediv = myDiv; var thistr = 'div#' + myDiv.replace('timer','cost') + ' > h2'; var thisin = 'div#' + myDiv.replace('timer','bet'); var plusrub = $(thistr).text(); var costvalue = plusrub.replace(' р.',''); var DisplayStr = ''; var DisplayFormat = "%%H%% : %%M%% : %%S%%"; DisplayStr = DisplayFormat.replace(/%%H%%/g, Calcage(secs,3600,24)); DisplayStr = DisplayStr.replace(/%%M%%/g, Calcage(secs,60,60)); DisplayStr = DisplayStr.replace(/%%S%%/g, Calcage(secs,1,60)); if(secs > 0) { document.getElementById(myDiv).innerHTML = DisplayStr; timeout_id = setTimeout("CountBack('" + myDiv + "'," + (secs-1) + ");", 1000); $.post('pscript/timers2session.php',{DivName : myDiv, DivTimer : timeout_id, DivCost : costvalue, Operation : 'save'}); } else { $(thisin).text(''); document.getElementById(myDiv).innerHTML = "Лот разыгран"; } } function IncrTime(DivId){ var thisdiv = 'div#' + DivId; var parsediv = thisdiv; var thistr = 'div#' + DivId.replace('timer','cost') + ' > h2'; var plusrub = $(thistr).text(); var minus = plusrub.replace(' р.',''); var thisid = 'div#' + DivId.replace('timer','lot') + ' > h1'; var plusnid = $(thisid).text(); var minusid = plusnid.replace('№ ',''); var costvalue = eval(minus) + 40 + ' р.'; var timevalue = $(thisdiv).text(); var countsec = timevalue.split(':'); var hour = eval(countsec[0]); var mins = eval(countsec[1]); var secs = eval(countsec[2]); var newsecs = hour*3600 + mins*60 + secs + 120; $(thistr).text(costvalue); Send_Timer(); $.post('pscript/timers2session.php',{DivName : DivId, DivCost : minus, GoodID : minusid, Operation : 'change'},function(data){ clearTimeout(data); }); CountBack(DivId,newsecs); } <div id='timer1'></div> <div id='cost1'>100 р.</div> <input type='button' value='Увеличить' onClick="IncrTime('timer1')"; <script language='javascript'>StartCountDown();</script> вот собственно код таймера! иногда таймер не изменяется полностью, то есть через секунду старое значение и новое! HELP!!!!!! И как отправить всем клиентам некое изменение без перезагрузки страницы? |
C помощью AJAX запроса (http://habrahabr.ru/blogs/jquery/42426/) (сам я пользуюсь http://visualjquery.com/) отправляешь твою инфу на сервер, где она сохраняется в базе. У клиента по таймеру тоже летят AJAX запросы на сервер, твоя инфа считывается из базы и возвращается клиенту у которого по событию ответа от сервера и отрисовывается пришедшая инфа. Вот как-то так, даже и не знаю чего ещё добавить.
|
Часовой пояс GMT +3, время: 13:56. |