2016-02-17 2 views
0

У меня проблема с некоторой функцией, которую я пишу. Мое «bateau» - это объект, который имеет положение x и y, чтобы поместить его в мой объект «решетка», который представляет собой таблицу элементов «bateau».

Joueur.prototype.placeFullBateau = function(grille, bateau) { 
    var x   = bateau.positionX; 
    var y   = bateau.positionY; 
    var direction = bateau.direction; 
    if (direction == "droite") { 
     for (var i = 0; i <= bateau.taille-1; i++) { 
      grille.plateau[x][y+i] = $(bateau); 
      console.log(bateau); 
      console.log($(bateau)); 
      console.log("Bateau : "+$(bateau).get(0).nom+", positionY : "+grille.plateau[x][y+i].get(0).positionY); 
      console.log(grille.plateau[x][y+i]); 
      $(bateau).get(0).positionY += 1; 
      }; 
}; 

В console.log() из «Бато», мой & Позиция X хороши Позиция Y, они меняются, как я хочу, чтобы изменить (я показываю только две линии, это «Бато» занимает 5) :

Object { nom: "Porte-avion", taille: 5, positionX: 4, positionY: 2, direction: "droite" } test.js:100:5 

Object { nom: "Porte-avion", taille: 5, positionX: 4, positionY: 3, direction: "droite" } test.js:100:5 

в console.log() из «$ (Bateau)», то Позиция Y (или Позиция X, в зависимости от того, я хочу, чтобы отличаться) запоминает последнее значение, оно принято. Здесь позиция Y будет всегда 7 (поскольку она начинается с 2, а размер - 5).

Я пытаюсь:

grille.plateau[x][y+i] = $(bateau); 
grille.plateau[x][y+i].get(0).positionY = bateau.positionY; 
$(bateau).get(0).positionY += 1; 

console results

Я потерял .. Надеюсь, я дал достаточно информации, чтобы получить некоторую помощь .. Я бы не вставить весь код/,

Вот скрипка: https://jsfiddle.net/0jaL7svo/ Не работает, отсутствуют изображения, которые показывают, когда я нажимаю на ячейку. Что я делаю, когда я нажимаю на ячейку, я беру ее идентификатор. Проблема в том, что идентификатор некоторых ячеек (который имеет объект в нем) неверен, потому что он принимает bateau.positionX & bateau.positionY & bateau.numJoueur. (Похоже, «441», для ячейки (4,4) игрока 1.) Вот полный рабочий проект: (см. Комментарий ниже, не может размещать две ссылки). Просто разархивируйте и загрузите локально (файловая система Linux).

Приветствия Krach

+1

Не могли бы вы добавить рабочий пример кода в http://jsfiddle.net. Трудно следить за тем, что происходит/что вы хотите сделать, только из письменного описания. –

+0

Зачем вам вообще нужно обертывать объект в '$()'? Не совсем понятно, что вы пытаетесь сделать. – charlietfl

+0

Здесь: https://jsfiddle.net/0jaL7svo/ Это не работает, потому что я использую образы, когда нажимаю «td», который меняет его фон. – Krach

ответ

0

Я предложил это быть закрыта как простофиля этого вопроса:

JavaScript closure inside loops – simple practical example

Но вот объяснение, почему:

Это очень распространенное JavasScript закрытие вызывать внутри цикла for. Вы должны захватить значение i в текущем проходе через петлю, а не просто ссылаться на i:

for (var i = 0; i <= bateau.taille-1; i++) { 
      (function(i) { 
       grille.plateau[x][y+i] = $(bateau); 
       console.log(bateau); 
       console.log($(bateau)); 
       console.log("Bateau : "+$(bateau).get(0).nom+", positionY : "+grille.plateau[x][y+i].get(0).positionY); 
       console.log(grille.plateau[x][y+i]); 
       $(bateau).get(0).positionY += 1; 
      }(i)); 
    }; 
+0

Благодарим за ответ. Это не работает. Никаких ошибок, но я все равно получаю тот же результат. – Krach

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