2012-05-10 2 views
0

Я пытаюсь нажать элементы в массив X, итерации через массив Y. В какой-то момент, нажав новый элемент в массив X, я получаю сообщение об ошибке «Неожиданный токен:» в консоли браузера. Я могу нажать несколько элементов должным образом, прежде чем он терпит неудачу (почти каждый раз около 7-го элемента).array.push() throws weird error

Это рекурсивная функция, и, возможно, вызывает вопрос ... Вот код:

function getPosition(img) { 
    var tmpRandPosition = Math.floor(Math.random() * (9)); 

    if($.inArray(galleryPositions[tmpRandPosition], populatedPositions) != -1) { 
     setTimeout("getPosition("+img+")",1); 
    } else { 
     populatedPositions.push(galleryPositions[tmpRandPosition]); 

     return true; 
    } 
} 

Как вы можете видеть из сценария, я пытаюсь для отображения фотографий в случайном порядке в 8 различных позиционированном элементов в HTML.

+0

Я думаю, что более вероятно, что существует проблема с именем файла этого конкретного изображения или что-то в этом роде. О, и передайте функцию вместо строки в этот setTimeout. – Christoph

+0

Проблема была, как указал Хантират, в неправильной функции, переходящей из setTimeout(). – jMn

ответ

3

Кажется, проблема в функции setTimeout. Попробуйте передать аргумент этой функции, используя анонимную функцию вместо конкатенации:

setTimeout(function() { getPosition(img) }, 1); 
+0

Да, это была проблема. Большое спасибо. :) – jMn

2

Это нарушит:

setTimeout("getPosition("+img+")",1); 

, как он на самом деле пишет:

setTimeout("getPosition(img_path.jpg)",1); 

и пытается оценить он (используя eval).

Проблема в том, что JS рассматривает img_path.jpg как переменную.

Fix:

setTimeout("getPosition('"+img+"')",1); 

Но никогда не делать это таким образом, как это не хорошо или быстро оценить строку.

Отправить вместо анонимной функция SetTimeout:

REALFIX:

setTimeout(function() { 
    getPosition(img); 
}, 1); 
+1

Спасибо, хорошие подсказки :) – jMn

1

Don't call setTimeout with a string argument. Всегда используйте функцию. Использование строки в этом случае подвергает этот код атакам инъекций, если уязвимость img является уязвимой.