Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 11.11.2021
Сообщений: 38

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

17.03.2023, 21:32. Показов 868. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объявляю переменную: var rowobj; , затем читаю файл excel и пытаюсь прочитать эту переменную вне обработчика, но не получается. Как в итоге можно сделать ее глобальной?(я понимаю, что внутри обработчика она перезаписывается, а потом не переходит в глобальную, но как это исправить не понимаю)

JavaScript
1
2
3
4
5
6
7
8
reader.addEventListener("loadend", evt => {
     rowobj = evt.target.value;
     var workbook = XLSX.read(evt.target.result, {type: "binary"}),
     worksheet0 = workbook.Sheets[workbook.SheetNames[1]],
      rowobj = XLSX.utils.sheet_to_row_object_array(worksheet0);
      rowobj = JSON.stringify(rowobj);
      
     });
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2023, 21:32
Ответы с готовыми решениями:

Как передать переменные из обработчика события addEventListener в глобальную область видимости?
В ф-ции обработчика события onclick для #param у меня рассчитываются 2 переменные. Как их значение сделать доступным для основного скрипта...

как передать глобальную переменную в класс
Всем привет! подскажите плиз, ответ на такой вопрос? У меня есть массив строк например String str он заполняется при создании...

Как передать глобальную переменную в twig
define("SEASON", 1); как теперь её в файле с расширением twig вывести?

4
88 / 40 / 10
Регистрация: 28.10.2022
Сообщений: 55
18.03.2023, 05:08
В общем смысл в том, чтобы переменная попала в глобальное поле видимости её сперва нужно там объявить, а уже потом записывать в неё данные

Добавлено через 43 минуты
rowobj = evt.target.value; вы записываете свойство значения события в переменную rowobj
rowobj = XLSX.utils.sheet_to_row_object_array(worksheet0); перезаписываете переменную помещая в неё таблицу exel
rowobj = JSON.stringify(rowobj); снова перезаписываете переменную, записывая в неё строку преобразуя через Node
если вам нужно чтобы после перезаписи переменная читалась тогда как выше я описал.
если же вам нужно чтобы в глобальном поле видимости считывался промежуточный перезаписываемый вариант переменной на пример этот rowobj = XLSX...., тогда у меня для вас плохие новости..., никак, скрипт выполняется последовательно создали переменную, записали в ней, записали снова, записали снова, записали снова и в итоге в ней будет информация записанная в самый последний раз, выход только создавать другую переменную и в ней записывать, ну или после записи запустить функцию в которой нужно считать переменную в данный момент выполнения и передать в ней это значение
JavaScript
1
2
var XLRowObject = XLSX.utils.sheet_to_row_object_array
var jsonObject = JSON.stringify
Это конечно замечательно что JS позволяет в себя пихать как угодно, но вы должны понимать что в структурном коде переменная должна нести смысл, у вас получается переменная rowobj используется аж для 3-х по смыслу разных вещей, а именно сперва хранит в себе значение, затем хранит данные преобразованной переменной worksheet0, а затем в обще хранит в себе строку JSON...
0
0 / 0 / 0
Регистрация: 11.11.2021
Сообщений: 38
18.03.2023, 08:16  [ТС]
Мне нужно, чтобы в глобальную rowobj был записана эта строка: rowobj = JSON.stringify(rowobj); , то есть данные уже перезаписанные в формат json. Пыталась через тертью переменную, но все равно выводит как undefined
То есть при выводе таким способ в консоль:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
var rowobj;
 
 reader.addEventListener("loadend", evt => {
     var workbook = XLSX.read(evt.target.result, {type: "binary"}),
     worksheet0 = workbook.Sheets[workbook.SheetNames[1]],
      rowobj = XLSX.utils.sheet_to_row_object_array(worksheet0);
      console.log(rowobj);
      rowobj = JSON.stringify(rowobj);
      console.log(rowobj);
     });
     console.log(rowobj);
В 7 строке мне выводится переменная, а в 9 нет. Хотя я объявила var rowobj как глобальную.
0
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
18.03.2023, 08:23
Можно ещё устроить дело так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
function getRowobj(file) {
  return new Promise((resolve) => {
     reader.addEventListener("loadend", evt => {
         rowobj = evt.target.value;
         var workbook = XLSX.read(evt.target.result, {type: "binary"}),
         worksheet0 = workbook.Sheets[workbook.SheetNames[1]],
         rowobj = XLSX.utils.sheet_to_row_object_array(worksheet0);
         rowobj = JSON.stringify(rowobj);
         resolve(rowobj)  
     });
     reader.readAsBinaryString(file);
  })
}
И вызывать эту функцию в глобальной области:
JavaScript
1
rowobj = await getRowobj(yourFile)
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3841 / 1690 / 431
Регистрация: 14.03.2022
Сообщений: 4,298
18.03.2023, 19:31
Цитата Сообщение от julya_yd Посмотреть сообщение
В 7 строке мне выводится переменная, а в 9 нет. Хотя я объявила var rowobj как глобальную.
Дело не в объявлении, а в асинхронности действий...
Ты уже сморишь значение переменной, а само чтение еще не завершено.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2023, 19:31
Помогаю со студенческими работами здесь

Как правильно передать глобальную переменную в поток
Помогите разобраться, Запускаю n - раз один экземпляр потока (создается 2 компонента на против нужной ноды в TreeView1), через...

Как передать значение запроса select в глобальную переменную sqlite?
здравствуйте. Помогите начинающему! в c# sqlite делаю sql запрос к базе данных, нужно занести результат запроса в переменную. Select...

Как объявить переменную что бы ее можно было передавать из одного обработчика событий в другой
как объявить переменную что бы ее можно было передавать из одного обработчика событий в другой пример из private: System::Void...

Как заменить глобальную переменную на параметр функции. Передать файл в качестве параметра
Нужно передать xml файл в качестве параметра в функцию sharedStringParse , избавиться от XML_PATH1 , т.к. в моем случае он не канает. Как...

Как передать переменную из одной функции-обработчика в другую?
void __fastcall TForm1::ListBox1Click(TObject *Sender) { int var = something(); } void __fastcall...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru