2012-09-14 3 views
3

Не медведь со мной ... Я не разработчик, поэтому я уверен, что не пошел об этом наилучшим образом, но, m надеясь, что мы сможем работать с тем, что у меня есть, чтобы заставить его работать правильно ...Uncaught ReferenceError: функция не определена (анонимная функция)

У меня есть комбинация js и php, которые работают вместе, чтобы нарисовать пары изображений на экране, а затем захватить ключ нажимает для выбора левого или правого изображения (используя «c» и «m» или стрелку влево и «стрелку вправо»).

Кажется, что он отлично работает в Safari, Firefox и IE, но не работает последовательно в Chrome (иногда это происходит, иногда это не так).

Я только что посмотрел на инспектора в Chrome во время работы, и обнаружил, что две функции были не найдены:

Uncaught ReferenceError: imgChoice is not defined (anonymous function)

Uncaught ReferenceError: stopChoice is not defined (anonymous function)

В моем поиске ответа, ближайший я получил то, что ему может быть, Chrome слишком быстро обрабатывает функцию flashImages() и не попадает в два других.

Есть ли способ, чтобы я мог исправить это? Возможно, интегрируйте функции imgChoice и stopChoice в функцию flashImages?

Вот существующие функции:

function imgChoice(imgPair) 
{ 
    var imgDataR = '<input type="hidden" name="'+imgPair+'[<?php echo $_POST['topicNumber']; ?>]" value="r" />'; 
    var imgDataL = '<input type="hidden" name="'+imgPair+'[<?php echo $_POST['topicNumber']; ?>]" value="l" />'; 
    var noData = '<?php $noData = 1; ?>'; 
    $(document).keydown(function(event) { 
     if (event.keyCode == 67 || event.keyCode == 37) { 
      document.getElementById(imgPair+'Data').innerHTML = imgDataL; 
      $(document).unbind('keydown'); 
      } 
     if (event.keyCode == 77 || event.keyCode == 39) { 
      document.getElementById(imgPair+'Data').innerHTML = imgDataR; 
      $(document).unbind('keydown'); 
     } 
    }); 
    //div = document.getElementById(imgPair); 
} 
function stopChoice(imgPair) 
{ 
    $(document).unbind('keydown'); 
} 
function flashImages() 
{ 
i=500; 
//$('#startTopic').fadeOut(500); 
setTimeout("document.getElementById('fullpd').style.cursor='none';",50); 
setTimeout("document.getElementById('fullpd').style.background='#464646';",500); 

for(x=1;x<=imgPairs.length-1;x++) 
    { 
    setTimeout("document.getElementById('clickSound').play();",i+2000); 
    setTimeout('document.getElementById("'+imgPairs[x]+'").style.display="block";',i+3500) 
    setTimeout('imgChoice("'+imgPairs[x]+'");',i+3495) 
    setTimeout('document.getElementById("'+imgPairs[x]+'").style.display="none";',i+4000) 
    setTimeout('stopChoice("'+imgPairs[x]+'");',i+6000) 
    i=i+4000; 
    } 
setTimeout("document.getElementById('fullpd').style.background='#eaeaea';",i+1000) 
setTimeout("document.getElementById('fullpd').style.cursor='default';",i) 
setTimeout(function() {$('#endTopic').fadeIn(1000);},i+1000); 
} 
+0

Вы должны показать больше контекста - проблема не кажется, там – Alexander

ответ

2

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

$(document).keydown(function(event) { Вместо этого попробуйте

$(document).on('keydown' ,function(event) { 
+0

Это, как представляется, сделать трюк ... спасибо! Я рад, что это было простое решение! – ScottM

Смежные вопросы