подгрузка в разные контенты одной функцией
День добрый. есть у меня код, который функцией startshow по введенному id с сервера подгружает информацию в контент, так же есть есть функция, которая добавляет поля ввода. Но столкнулся я с такой проблемой: когда у меня одно поле ввода - все нормально, данные тянутся, но когда я добавляю второе и начинаю для него подгружать информацию, моя функция startshow забывает про первое и делает 2 одинаковых запроса со второго поля.
вот сам код <body onLoad='addplace();'> <input type='button' onClick='addplace();' value='+'> <div id='ins_body'></div> <div id='cont_body'></div> <script> function addplace(){ n=$('.user_cont').length + 1; $('#ins_body').append("<input id='id"+n+"' type='text' size='5' title='Введите идентификатор персонажа'><input type='checkbox' id='started"+n+"' onClick='startshow(this.id);'><br>"); $('#cont_body').append("<div id='content"+n+"' class='user_cont'></div>"); } function startshow(id){ regexp=/\d+/; s=id.match(regexp); setTimeout(function showuser(){ if ($('#started'+s).prop('checked')) { $('#content'+s).css('display','block'); $.ajax({ url: 'sled_1.php', cache: false, data: 'id='+$('#id'+s).val(), success: function(html){ $('#content'+s).html(html); setTimeout(function(){showuser(s);},2000); } }); } else { $('#content'+s).css('display','none'); } },100); } </script> </body> Подскажите пожалуйста как же мне реализовать задуманное? Чтобы для нескольких полей подгружалась разная информация. |
код вроде выглядит нормально
за исключением конечно же глобальных переменных 'regexp' и 's' в функции 'startshow', особенно 's' может для начала попробовать вот так? var s = id.match(regexp); но совершенно непонятен смысл двух 'setTimeout' для солидности? |
Цитата:
Цитата:
upd: спасибо, все отлично, и что я сразу с глобальными переменными то не сообразил) |
Теперь столкнулся с такой проблемой: оказывается (!), если я несколько раз чекаю, то таймер запускается по новой (при этом старый остается в памяти :yes: ), в итоге имеется неограниченное количество таймеров. Подскажите как решить это?
может нужна какая-то хитрая переменная для таймера ? |
Цитата:
Цитата:
а почему вы боитесь самому что-то сделать? у вас что ли наставник, который бъет вас палкой, если ему что-то в коде не нравится? сделайте какой-нибудь массив булевых переменных для инпутов с запущенными таймерами или еще что-нибудь |
Цитата:
function startshow(id){ var regexp=/\d+/; var s=id.match(regexp); var cook=getCookie('timer'+s); if(cook!=undefined){ alert(cook); // правильно выдает мне значение моего таймера var clear_cookie=clearTimeout(cook); alert(clear_cookie); // выдает мне undefined } if ($('#started'+s).prop('checked')) { var timerID = setTimeout(function showuser(){ $('#content'+s).css('display','block'); $.ajax({ url: 'sled_1.php', cache: false, data: 'id='+$('#id'+s).val(), success: function(html){ $('#content'+s).html(html); if ($('#started'+s).prop('checked')) { setTimeout(function(){showuser(s);},5000); } } }); },100); document.cookie="timer"+s+"="+timerID; } } |
собственно даже когда через консоль пытаюсь грохнуть таймер через 'clearTimeout', мне выползает сообщение 'undefined'
|
Цитата:
но в вашем коде я разбираться не буду потому что во вложенных 'setTimeout', запускающих одну и ту же функцию, есть что-то фундаментально неправильное большинству людей хватает одного '$.ajax' function startshow(id) { $.ajax({...}) } |
Цитата:
скриптом я тяну страницу с сервера, на которой в свою очередь парсится другая страница с (имя домена), допустим вы Петя из далекой глубинки, из провайдеров у вас только мелофон или тому подобный оператор с зоной покрытия 2g (и такое бывает,да). так вот контент, тянущийся меняется с завидной периодичностью, для этого используется 'setInterval', но как я уже говорил вы Петя из глубинки и страница у вас грузится дольше, чем таймер в 'setInterval', вот тут то и происходят наложения, дабы это избежать я использую вложенные таймауты - в этом их плюс. и кстати да, с таймерами я разобрался, потратил пол дня, но разобрался - повысил свой Экспириенс. |
Часовой пояс GMT +3, время: 02:44. |