подгрузка в разные контенты одной функцией
День добрый. есть у меня код, который функцией 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, время: 20:37. |