Не могу в setInterval вызвать метод объекта
Привет!
Есть вот такой несложный объект:
var MyMsg = {
// отправка сообщения -------------------------------------------------
sendMsg: function (myid) {
// проверим AJAX-ом не добавлялось ли сегодня такое сообщение
ReadFromSrv(
'ajaxresp',
'chkmsg.php',
'text='+$('TXT').value+ '&myid='+myid,
'GET'
);
// ждем ответа и отправим форму
var tmr = setInterval(
function () {this.sendFormOnResponce();},
20 // интервал в милисекундах
);
}
// отправить форму -----------------------------------------------------
sendForm: function () {
$('BAD').value = 'BAD';
$('msgadd').submit();
},
// если пришел ответ от сервера, то отправим форму ---------------------
sendFormOnResponce: function () {
var res = '';
//проверка есть ли уже ответ от сервера
if ($('ajaxresp').value != '') {
res = $('ajaxresp').value;
} else {
res = false;
}
// если все хорошо, отправить форму
if (res) {
// остановим таймер
clearInterval(tmr);
if (res === '0') {
// отправляем форму
this.sendForm();
} else {
// сервер вернул текст. покажем его
alert(res);
}
}
},
}
Значит, этот код располагается на странице в разделе <BODY> в начале. На странице есть кнопка у которой в onclick прописано:
onclick="javascript:MyMsg.sendMsg('$hash');"
Страница загружается без ошибок. При нажатии на кнопку случается ошибка: Uncaught exception: TypeError: 'this.sendFormOnResponce' is not a function Т.е. при нажатии взводится setInterval, которой передается функция this.sendFormOnResponce, и которую JS функцией считать не хочет... Никак не пойму, отчего такая ошибка. Что я делаю не так? p.s. в не-объектном виде (т.е. в виде набора из отдельных процедур) это все работает, я учусь работать через объекты. |
...
var th = this;
this._tmr = setInterval(
function () {th.sendFormOnResponce();},
20 // интервал в милисекундах
);
...
// остановим таймер
clearInterval(this._tmr);
...
|
А почему так? В setInterval не передается значение this?
|
не передается.
|
Понятно, спасибо)
|
| Часовой пояс GMT +3, время: 10:52. |