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 javascript:photo.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;'>←</a></td> <td class='nav'><a href='#' onClick='javascript:photo.next(); return false;'>→</a></td> </tr> </table> В Google Chrome и IE работает отлично! |
отлично код работает:
<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;'>←</a></td> <td class='nav'><a href='#' onClick='javascript:photo.next(); return false;'>→</a></td> </tr> </table> скорее всего вы объявляете photo где-то в чьей-то внутреней обласи видимости. без полного кода, не скажеш, наверняка. |
Попробую проверить вашу версию, но вот сразу у меня возникает мысль...
Есть соседний скрипт в котором реализуется такой же метод, только названия другие, и он идеально работает на всех браузерах, и этот код во время проверки отключал. Полный код привести на форуме не могу, он слишком большой. |
Gvozd, спасибо!
Вы дали мне идею проверить весь код на одинаковые имена, в итоге в коде была переменная photo, с которой собственно код и сорился, просто изменение имени функции на photoAction решило все проблемы, код работает отлично! |
Часовой пояс GMT +3, время: 01:52. |