Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.08.2009, 22:15
Интересующийся
Отправить личное сообщение для Volk_88 Посмотреть профиль Найти все сообщения от Volk_88
 
Регистрация: 23.07.2009
Сообщений: 17

Is not a function...
Имеется данный код:
photo = (function(){
	var pid, cid, uid, url, act;
	function setData(){
		pid = ge('photoid').value;
		cid = ge('catid').value;
		uid = ge('userid').value;
		url = 'ajax/photo.php';
	}
	var onDone = function(xml, text){
		var tag = new Array('pid','name','pic','list','width','height');
		var value = new Array();
		for(var i=0; i<tag.length; i++){
			value[tag[i]] = xml.getElementsByTagName(tag[i])[0].firstChild.nodeValue;
		}
		location.hash = 'id=' + value['pid'];
		ge('photoid').value = value['pid'];
		ge('commentmid').value = value['pid'];
		ge('picname').innerText = value['name'];
		ge('photolink').innerHTML = toHtml(value['pic']);
		var list = toHtml(value['list']);
		if(list != '0'){
			ge('frends').innerHTML = list;
		}else{
			ge('frends').innerHTML = "";
		}
		var width  = (800 - value['width']) / 2;
		var left = parseInt(value['width'] / 2) - 50 + width;
		var top = parseInt(value['height'] / 2) - 50;
		ge('photoloader').style.display = "block";
		ge('photoloader').style.left = left+"px";
		ge('photoloader').style.top  = top+"px";
		comment.nextPage('0');
	}
	var onFail = function(){
		alert('fail');
	}
	
	var pajax = new Ajax(onDone, onFail);

	return{
		next: function(){
			act = 'next';
			setData();
			pajax.post(url, {'id':pid,'uid':uid,'cat':cid,'act':'next'});
		},
		prew: function(){
			act = 'prew';
			setData();
			pajax.post(url, {'id':pid,'uid':uid,'cat':cid,'act':'prew'});
		},
		load: function(){
			ge('photoloader').style.display = "none";
		}
	}
}())

Но при вызове photo.next(); or photo.prew();
FF пишет photo.next(); is not a function

Думал ошибка в коде упросит до:
photo = (function(){
		
	return{
		next: function(){
			alert('next');
		}
	}
}())

И все ровно выдает photo.next(); is not a function
Не понимаю, в чем проблема... может кто сталкивался или знает объяснение такого глюка, кстате в Opere выдает следующие:
Event thread: click
Error:
name: TypeError
message: Statement on line 1: Type mismatch (usually non-object value supplied where object required)
Backtrace:
Line 1 of function script
javascripthoto.next();
stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

Незнаю важно тут или нет, но данный код вызывается следующим способом:
<table id='photonavigation'>
	<tr>
		<td class='nav'><a href='#' onClick='javascript:photo.prew(); return false;'>&larr;</a></td>
		<td class='nav'><a href='#' onClick='javascript:photo.next(); return false;'>&rarr;</a></td>
	</tr>
</table>


В Google Chrome и IE работает отлично!
Ответить с цитированием
  #2 (permalink)  
Старый 19.08.2009, 22:27
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

отлично код работает:
<script>
photo = (function(){
 
    return {
        next: function(){
            alert('next');
        },
		prev: function(){
            alert('prev');
        }
		
    }
}())
</script>
<table id='photonavigation'>
    <tr>
        <td class='nav'><a href='#' onClick='javascript:photo.prev(); return false;'>&larr;</a></td>
        <td class='nav'><a href='#' onClick='javascript:photo.next(); return false;'>&rarr;</a></td>
    </tr>
</table>

скорее всего вы объявляете photo где-то в чьей-то внутреней обласи видимости. без полного кода, не скажеш, наверняка.
Ответить с цитированием
  #3 (permalink)  
Старый 19.08.2009, 22:33
Интересующийся
Отправить личное сообщение для Volk_88 Посмотреть профиль Найти все сообщения от Volk_88
 
Регистрация: 23.07.2009
Сообщений: 17

Попробую проверить вашу версию, но вот сразу у меня возникает мысль...
Есть соседний скрипт в котором реализуется такой же метод, только названия другие, и он идеально работает на всех браузерах, и этот код во время проверки отключал.

Полный код привести на форуме не могу, он слишком большой.
Ответить с цитированием
  #4 (permalink)  
Старый 19.08.2009, 22:42
Интересующийся
Отправить личное сообщение для Volk_88 Посмотреть профиль Найти все сообщения от Volk_88
 
Регистрация: 23.07.2009
Сообщений: 17

Gvozd, спасибо!
Вы дали мне идею проверить весь код на одинаковые имена, в итоге в коде была переменная photo, с которой собственно код и сорился, просто изменение имени функции на photoAction решило все проблемы, код работает отлично!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление информации Lvenok1987 Элементы интерфейса 14 05.02.2010 06:34
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
Помогите исправить скрипт по поиску в базе данных dok_sj2 Internet Explorer 2 29.06.2009 20:04
Определение размеров изображения kondrat Events/DOM/Window 12 06.05.2009 13:05
function lock (permitted execution) forker Общие вопросы Javascript 2 15.01.2009 19:24