Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.12.2018, 19:33
Новичок на форуме
Отправить личное сообщение для Rovor Посмотреть профиль Найти все сообщения от Rovor
 
Регистрация: 02.12.2018
Сообщений: 4

Видимость переменной во вложенной функции
Здравствуйте, прошу помочь вот с чем.
Пишу скрипт который будет собирать информацию со страницы в WebSQL.
Но столкнулся с тем, что переменная счетчика цикла i не видна в функции tx. Подскажите, как исправить?

for (i=0;i<count.length;i++){
    db.transaction(function(tx) {
        tx.executeSql("INSERT INTO players (galaxy, system, planet, planetname, name, alliance) VALUES (?,?,?,?,?,?);",[galaxy,system,planet[i],planetname[i],player[i],alliance[i]]);});}


Здесь привожу полный текст скрипта:


var planet = Array();
var planetname = Array();
var player = Array();
var alliance = Array();
var i = 0;
var db = openDatabase("SK", "1", "Players", 200000);
//db.transaction(function(tx) {tx.executeSql("CREATE TABLE players (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, galaxy INT, system INTEGER, planet INTEGER, planetname TEXT, name TEXT, alliance TEXT);")});
var galaxy = Number($("[name='galaxy']")[0].value)
var system = Number($("[name='system']")[0].value)
var count = $(".galaxy_row");
    for (i=0;i<count.length;i++){
planet[i] = Number($(".galaxy_row")[i].children[1].innerText)
planetname[i] = $(".galaxy_row")[i].children[3].innerText
player[i] = $(".galaxy_row")[i].children[6].innerText
alliance[i] = $(".galaxy_row")[i].children[7].innerText
db.transaction(function(tx) {tx.executeSql("INSERT INTO players (galaxy, system, planet, planetname, name, alliance) VALUES (?,?,?,?,?,?);",[galaxy,system,planet[i],planetname[i],player[i],alliance[i]]);});

Последний раз редактировалось Rovor, 02.12.2018 в 19:36.
Ответить с цитированием
  #2 (permalink)  
Старый 02.12.2018, 20:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Rovor,
переделайте for на each
Ответить с цитированием
  #3 (permalink)  
Старый 02.12.2018, 20:34
Новичок на форуме
Отправить личное сообщение для Rovor Посмотреть профиль Найти все сообщения от Rovor
 
Регистрация: 02.12.2018
Сообщений: 4

рони,
Можно чуть подробнее, пожалуйста?)
Ответить с цитированием
  #4 (permalink)  
Старый 02.12.2018, 20:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Rovor,
var i = 0;
count.each(function(i, elem) {
  planet[i] = Number(elem.children[1].innerText);
  //...
	});
Ответить с цитированием
  #5 (permalink)  
Старый 02.12.2018, 21:11
Новичок на форуме
Отправить личное сообщение для Rovor Посмотреть профиль Найти все сообщения от Rovor
 
Регистрация: 02.12.2018
Сообщений: 4

рони,
Спасибо огромное, проблема решена)
Если несложно, объясните, пожалуйста, в чём была ошибка?
Ответить с цитированием
  #6 (permalink)  
Старый 02.12.2018, 21:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Rovor,
переменная i сохраняла последнее значение, а не то которое было в момент формирования, если нужно сохранить значение используют замыкание с помощью методов типа each или заменяют var на let(если возможно).
Ответить с цитированием
  #7 (permalink)  
Старый 02.12.2018, 21:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Rovor,
https://learn.javascript.ru/let-const
пункт 3 по ссылке
Ответить с цитированием
  #8 (permalink)  
Старый 02.12.2018, 22:19
Новичок на форуме
Отправить личное сообщение для Rovor Посмотреть профиль Найти все сообщения от Rovor
 
Регистрация: 02.12.2018
Сообщений: 4

рони,
Спасибо!)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов вложенной функции объявленной без ключевого слова var ytil Общие вопросы Javascript 6 15.10.2018 22:53
Передать только значение переменной из функции Retro_1477 jQuery 3 18.08.2018 13:25
Переопределение переменной в функции tsigel Общие вопросы Javascript 5 06.09.2013 18:26
изменение значения глобальной переменной внутри функции mgmarket Серверные языки и технологии 14 13.09.2011 00:56
изменение переменной в функции ananax Общие вопросы Javascript 19 12.01.2011 12:09