Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
9 / 5 / 4
Регистрация: 09.01.2020
Сообщений: 66

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

17.01.2020, 07:31. Показов 1685. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

В общем, есть TextArea куда заносятся числы, от 500 до 20 000. После потери фокуса у textarea данные должны записаться в глобальную переменную, после первого теста все норм записывается, но если дальше добавлять числа в textarea, то он прекращает записывать в глобальную переменную, оставляя лишь старые данные.

Меня это оч удивило, с кодом все кажется хорошо. Может кто нибудь может подсказать в чем здесь дело?

HTML5
1
2
3
4
5
6
7
<textarea name="set" id="" cols="30" rows="10" placeholder="20000
15000
3000
  "></textarea>
<button>btn</button>
 
<textarea name="show" id="" cols="30" rows="10" style='margin-top: 50px;'></textarea>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// global variable
let arrValuesTextarea = [''];
 
// find elements
$('textarea').on('focusout', function(){
    // Убираем пробел с конца строки
    var stripped = $(this).val().replace(/\n+$/g, '');
  $(this).val(stripped);
  
  let arrStripped = stripped.split('\n');
  var temporaryVariable = '';
 
  for(var i = 0, ln = arrStripped.length; i < ln; ++i)
    arrValuesTextarea[i] = arrStripped[i];
            
})
 
$('button').on('click', function(){
    
  var temporaryVariable = '';
  
  for(var i = 0; i < arrValuesTextarea.length; i++){
    temporaryVariable += arrValuesTextarea[i] + '\n';
    
  }
  $('textarea[name="show"]').text(temporaryVariable);
  
  
})
Вот ссылка на код - https://jsfiddle.net/qcrmyjov/17/
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.01.2020, 07:31
Ответы с готовыми решениями:

Форма поверх всех окон (даже после потери фокуса).
К примеру есть две формы: form1 и form2. form2 запускается из form1, и должна всегда оставаться поверх всех окон. При этом form1 должна...

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

(WinCC) записать данные в глобальную переменную
Есть Simatic 7 Step программа. В ней есть Global Script, где я пишу свои функции. Но жизненный цикл переменных не дает ее запомнить к...

6
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
19.01.2020, 01:12
Pvhz_, Чтоб понять в чем проблема добавьте console.log()

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
$('textarea').on('focusout', function(){
    // Убираем пробел с конца строки
    var stripped = $(this).val().replace(/\n+$/g, '');
  $(this).val(stripped);
  
  let arrStripped = stripped.split('\n');
  var temporaryVariable = '';
 
  for(var i = 0, ln = arrStripped.length; i < ln; ++i)
    arrValuesTextarea[i] = arrStripped[i];
            
  console.log(arrValuesTextarea);
})
Вы перезыписываете конкретные значения по ключу, но не очищаете глобальную переменную. Там остаются старые данные.

Мне не совсем понятно зачем это сохранять в глобальную переменную. Разве нельзя достать данные при нажатии на кнопку прямо из textarea?
1
9 / 5 / 4
Регистрация: 09.01.2020
Сообщений: 66
20.01.2020, 05:01  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Мне не совсем понятно зачем это сохранять в глобальную переменную. Разве нельзя достать данные при нажатии на кнопку прямо из textarea?
Да, конечно можно.
Но, я пытаюсь сократить код растолковав их по разным частям. Дело в том что пользователь может ввести такие значения:
- 20000р.
- 20 000 р.
- 20000руб
- 20 000 руб.
- и другое

Поэтому я все это делаю после потери фокуса, очищаю все не нужное и оставляю лишь цифры и добавляю в глобальную переменную. А после нажатия он эти значения выводит и производит другие действия.
0
380 / 230 / 115
Регистрация: 22.11.2016
Сообщений: 379
20.01.2020, 10:50
Лучший ответ Сообщение было отмечено Pvhz_ как решение

Решение

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.js"></script>
</head>
<body>
    <textarea name="set" id="" cols="30" rows="10" placeholder="20000
15000 
3000"></textarea>
    <button id="btn">btn</button>
    <textarea name="show" id="" cols="30" rows="10" style='margin-top: 50px;'></textarea>
    <script>
        "use strict";
        // find elements
        $('textarea[name="set"]').on('focusout', function(){
            let textareaValue = $(this).val().replace(/[^\d\n]/g, '');
            let arr = textareaValue.split("\n").filter(i => i !== "");
            textareaValue = arr.join("\n");
            $(this).val(textareaValue);
        });
         
        $('#btn').on('click', function() {
          $('textarea[name="show"]').text( $('textarea[name="set"]').val() );
        });
    </script>
</body>
</html>
1
9 / 5 / 4
Регистрация: 09.01.2020
Сообщений: 66
20.01.2020, 11:17  [ТС]
Цитата Сообщение от fixeri Посмотреть сообщение
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.js"></script>
</head>
<body>
    <textarea name="set" id="" cols="30" rows="10" placeholder="20000
15000
3000"></textarea>
    <button id="btn">btn</button>
    <textarea name="show" id="" cols="30" rows="10" style='margin-top: 50px;'></textarea>
    <script>
        "use strict";
        // find elements
        $('textarea[name="set"]').on('focusout', function(){
            let textareaValue = $(this).val().replace(/[^\d\n]/g, '');
            let arr = textareaValue.split("\n").filter(i => i !== "");
            textareaValue = arr.join("\n");
            $(this).val(textareaValue);
        });
$('#btn').on('click', function() {
          $('textarea[name="show"]').text( $('textarea[name="set"]').val() );
        });
    </script>
</body>
</html>

За код благодарю, но все же не понял почему у меня не записывались новые данные.
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
20.01.2020, 17:14
Pvhz_,
Цитата Сообщение от Pvhz_ Посмотреть сообщение
но все же не понял почему у меня не записывались новые данные.
Я же вам выше написал. Вы прочитали только последнее мое предложение?
Потому что перед заполнением глобальной переменной вы ее не очищаете, и там остаются старые данные.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$('textarea').on('focusout', function(){
    // Убираем пробел с конца строки
    var stripped = $(this).val().replace(/\n+$/g, '');
  $(this).val(stripped);
  
  let arrStripped = stripped.split('\n');
  var temporaryVariable = '';
 
  arrValuesTextarea = [];
 
  for(var i = 0, ln = arrStripped.length; i < ln; ++i)
    arrValuesTextarea[i] = arrStripped[i];
 
})
1
9 / 5 / 4
Регистрация: 09.01.2020
Сообщений: 66
21.01.2020, 06:35  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Я же вам выше написал. Вы прочитали только последнее мое предложение?
Потому что перед заполнением глобальной переменной вы ее не очищаете, и там остаются старые данные.
Да. Я это увидел)
Спасибо что ответили!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2020, 06:35
Помогаю со студенческими работами здесь

Отображение диалоговых всех открытых окон после потери фокуса основной формы
Добрый день! Подскажите, как реализовать отображение диалогового окна при потери фокуса с основной формы. Например, открыта основная...

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

После создания файла, данные не записываются
if (!(File.Exists(nameFile))) File.Create(nameFile);проверяю на существование файла если его нет создается новый ...

Валидация до потери фокуса
Добрый день. Есть TextBox который привязан к свойству типа int, при попытке ввести текст и потере фокуса возникает ошибка вальвации, как...

Событие потери фокуса Edit-ом
Привет, есть ли события или что-то этого в Edit ? мне нужен момент когда с Edit-а сняли фокус


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru