Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2013, 16:33
Новичок на форуме
Отправить личное сообщение для Talker Посмотреть профиль Найти все сообщения от Talker
 
Регистрация: 21.11.2012
Сообщений: 4

Не могу в 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. в не-объектном виде (т.е. в виде набора из отдельных процедур) это все работает, я учусь работать через объекты.

Последний раз редактировалось Talker, 26.08.2013 в 16:35.
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2013, 16:42
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

...
var th = this;
this._tmr = setInterval(
    function () {th.sendFormOnResponce();},
    20 // интервал в милисекундах
);



...



// остановим таймер
clearInterval(this._tmr);
...
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2013, 17:05
Новичок на форуме
Отправить личное сообщение для Talker Посмотреть профиль Найти все сообщения от Talker
 
Регистрация: 21.11.2012
Сообщений: 4

А почему так? В setInterval не передается значение this?
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2013, 17:15
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

не передается.
Ответить с цитированием
  #5 (permalink)  
Старый 26.08.2013, 17:16
Новичок на форуме
Отправить личное сообщение для Talker Посмотреть профиль Найти все сообщения от Talker
 
Регистрация: 21.11.2012
Сообщений: 4

Понятно, спасибо)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача полю объекта - массиву, значения элемента через set метод poorking Общие вопросы Javascript 1 13.02.2011 20:22
Не могу вытащить массив из объекта по указателю из самого объекта bunta Общие вопросы Javascript 3 09.09.2010 18:44
Как узнать у какого объекта вызван метод. Scalar Events/DOM/Window 4 26.03.2010 11:10
Как по событию вызвать метод определенного экземпляра объекта jvs jQuery 3 24.12.2009 16:04
Как внутри класса вызвать метод из соседнего метода Shahurik Общие вопросы Javascript 2 13.11.2009 12:20