С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1

Как добавить ещё одну аналогичную форму по нажатии на текущую, используя JS

28.02.2019, 21:45. Показов 6394. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всё просто. Есть форма. Нужно по нажатию на неё добавить ещё одно поле. Точнее даже не по нажатию, а при вводе текста, если есть такая возможность в JS.

Вот сама форма.

HTML5
1
2
3
4
5
6
7
<div class="field inline">
            <label for="specially" class="subhead">Специальная цена от</label>
            {{ form.specially }}
            <span>кг</span>
            {{ form.number }}
            <span>грн</span>
</div>
JavaScript
1
2
3
4
5
6
7
<script>
$(document).ready(function() {    
  $('.field').on('click', function(){    //тут нужен не click, а функция, которая определяет ввод текста.
    ???
  })
})
</script>
То есть, задача простая, нужно просто такой же div добавить. И таких дивов может быть бесконечное множество. Так как JS пока не знаю, решить её сам не могу(
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2019, 21:45
Ответы с готовыми решениями:

супер аякс форм добавить еще одну форму?
каким путем можно добавить еще одну форму? если в xml добавить дополнительно такуюже запись с полями то на почту приходит пустые...

Можно ли добавить ещё одну печатную форму в документ, где уже есть одна форма?
Подскажите пожалуйста,фот у меня в документе есть печатная форма.Можно ли добавить ещё одну печатную форму в этот документ. Внешние...

В форму списка добавить ниже ещё одну таблицу, в которую должны выводиться данные по кадровым документам
Форумчане, прошу Вашей помощи в решении задачи: &quot;Создать форму списка справочника ФизическиеЛица. В таблицу вывести поля Код, Ф.И.О.,...

19
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
01.03.2019, 06:15
можно так
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<div id="wrapper">
    <div class="field inline">
        <label for="specially" class="subhead">Специальная цена от</label>
        <form action="">
            <input type="number">
        </form>
        <span>кг</span>
        <form action="">
            <input type="number">
        </form>
        <span>грн</span>
    </div>
</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
let wrapper = document.getElementById('wrapper');
let addEl = (elem) => {
    let arr = elem.querySelectorAll('.field,.inline');
    let el = arr[arr.length - 1];
    let inpts = el.querySelectorAll('input');
    for(let i = 0; i < inpts.length; i++)
        if(!inpts[i].value)
            return false;
    let last = el.cloneNode(true);
    last.querySelectorAll('input').forEach(c => c.value = '');
    elem.appendChild(last);
}
wrapper.addEventListener('change', () => addEl(wrapper));
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
01.03.2019, 09:27

Не по теме:

klopp, Приветствую


m0nte-cr1st0,

Можно еще так -> https://codepen.io/Mr_Sergo/pe... itors=1010
HTML5
1
2
3
4
5
6
7
8
9
<div class="field inline">
    <form class="form">
        <label for="specially" class="subhead">Специальная цена от</label><br>
        <input type="number"><br>
        <span>кг</span><br>
        <input type="number"><br>
        <span>грн</span><br><br>
    </form>
</div>
JavaScript
1
2
3
4
5
6
document.querySelector('.field.inline').addEventListener('input', e => {
    let copy = e.currentTarget.querySelector('.form').cloneNode(true).outerHTML;
    let input = e.currentTarget.querySelectorAll('input');
    for(let i of input) if(!+i.value || +i.value < 0) return;
    e.currentTarget.insertAdjacentHTML('beforeEnd', copy);
});
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
01.03.2019, 12:55  [ТС]
Mr_Sergo, klopp, спасибо за ответы, но не работает. возможно, потому что у меня форма представлена, ка {{form...}}, а у вас через инпуты?
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
01.03.2019, 13:08
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
{{form...}}
Я могу ошибаться но разве это синтаксис не Vue.js?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
01.03.2019, 15:28  [ТС]
Mr_Sergo, не знаю, как на счёт vue, но это джанго питоновский.)

Добавлено через 2 часа 12 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
'specially': forms.TextInput(
                attrs={
                    'class': 'event',
                    'style': 'width: 165px',
                }
            ),
'number': forms.TextInput(
                attrs={
                    'class': 'event',
                    'style': 'width: 100px'
                }
            ),
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.03.2019, 19:13
Лучший ответ Сообщение было отмечено m0nte-cr1st0 как решение

Решение

Это не имеет никакого отношения к Джанго. Почему это в Джанго? Вопрос про дублирование поля ввода при начале ввода текста в существующем при помощи JS.

Топикстартер, покажите полученный html код страницы, после рендера в джанге,
JS пиплы, расскажите как для этого кода и этой конкретной формы дублировать поля ввода.
2
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
01.03.2019, 20:37  [ТС]
Jabbson, дичь какая-то.

это когда модеры в форум jquery переместили тему.
Мне кажется что вы не в ту ветку написали, тут в основном сидят "нативные JS-ники", вряд ли вам тут помогут, вам нужно было писать... наверное в ветку питона...
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
01.03.2019, 20:41  [ТС]
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
01.03.2019, 20:47
m0nte-cr1st0, только не скрин а код со скрина
1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.03.2019, 20:50
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
это когда модеры в форум jquery переместили тему.
так или иначе этому место не тут
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
01.03.2019, 20:55
m0nte-cr1st0,
Под формой вы подразумеваете все дочерние элементы <div id="specially">?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
01.03.2019, 21:11  [ТС]
Цитата Сообщение от Mr_Sergo Посмотреть сообщение
только не скрин а код со скрина
вот код со скрина
HTML5
1
2
3
4
5
6
7
<div id="specially" class="field inline">
  <label class="subhead" for="specially_price">Специальная цена от:</label>
  <input id="id_specially_price" class="event" type="text" name="specially_price" style="width: 165px" required="">
  <span>кг</span>
  <input id="id_specially_number" class="event" type="text" name="specially_number" style="width: 100px" required="">
  <span>грн</span>
</div>
Этот код видно в инспекторе HTML.

В самом же коде эта форма выглядит так:
HTML5
1
2
3
4
5
6
7
<div class="field inline" id="specially">
            <label for="specially" class="subhead">Специальная цена от</label>
            {{ form.specially_price }}
            <span>кг</span>
            {{ form.specially_number }}
            <span>грн</span>
</div>
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
widgets = {
            'specially_price': forms.TextInput(
                attrs={
                    'class': 'event',
                    'style': 'width: 165px',
                }
            ),
            'specially_number': forms.TextInput(
                attrs={
                    'class': 'event',
                    'style': 'width: 100px'
                }
            ),
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
01.03.2019, 21:12  [ТС]
Цитата Сообщение от Mr_Sergo Посмотреть сообщение
Под формой вы подразумеваете все дочерние элементы <div id="specially">?
да, это эти два поля
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
01.03.2019, 22:38
m0nte-cr1st0,

Сам <div id="specially"> тоже должен копироваться или только его содержимое?

Добавлено через 3 минуты
m0nte-cr1st0,

И как быть с id-шниками у элементов? id в пределах страницы должен быть уникальным (не может быть одинаковых значений id), при копировании они соответственно будут плодиться, у новых элементов id-шники нужны или их можно удалить?

Добавлено через 2 минуты
В поля для ввода могут вводиться только цифры или буквы тоже можно?

Добавлено через 15 минут
А пока так -> https://codepen.io/Mr_Sergo/pe... itors=1000
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div id="specially" class="field inline">
    <label class="subhead" for="specially_price">Специальная цена от:</label>
    <input id="id_specially_price" class="event" type="text" name="specially_price" style="width: 165px" required="">
    <span>кг</span>
    <input id="id_specially_number" class="event" type="text" name="specially_number" style="width: 100px" required="">
    <span>грн</span>
</div>
 
<script>
    let copy = document.querySelector('#specially').cloneNode(true);
    copy.removeAttribute('id');
    for(let e of copy.querySelectorAll('input')) e.removeAttribute('id');
 
    document.querySelector('.field.inline').addEventListener('input', e => {
        let input = e.currentTarget.querySelectorAll('input');
        for(let i of input) if(!i.value) return;
        e.currentTarget.insertAdjacentHTML('beforeEnd', copy.outerHTML);
    });
</script>
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
01.03.2019, 23:28  [ТС]
Цитата Сообщение от Mr_Sergo Посмотреть сообщение
И как быть с id-шниками у элементов? id в пределах страницы должен быть уникальным (не может быть одинаковых значений id), при копировании они соответственно будут плодиться, у новых элементов id-шники нужны или их можно удалить?
не подумал об этом. можно айди на класс заменить тогда.

Цитата Сообщение от Mr_Sergo Посмотреть сообщение
В поля для ввода могут вводиться только цифры или буквы тоже можно?
цифры

Цитата Сообщение от Mr_Sergo Посмотреть сообщение
спасибо, сейчас попробую

Добавлено через 2 минуты
Цитата Сообщение от Mr_Sergo Посмотреть сообщение
Сам <div id="specially"> тоже должен копироваться или только его содержимое?
тоже должен копироваться
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
01.03.2019, 23:37  [ТС]
что-то не так

в архиве видео.
Вложения
Тип файла: zip alphanav-2019-03-01_22.32.40.mp4.zip (1.70 Мб, 1 просмотров)
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
02.03.2019, 13:12
Лучший ответ Сообщение было отмечено m0nte-cr1st0 как решение

Решение

m0nte-cr1st0,

Все id-шники перенесены в class-ы !!!
Пока вы не сделаете так что бы изначальная форма, на странице в браузере, выглядела так как ниже
HTML5
1
2
3
4
5
6
7
<div class="field inline specially">
    <label class="subhead" for="specially_price">Специальная цена от:</label>
    <input class="event id_specially_price" type="text" name="specially_price" style="width: 165px" required="">
    <span>кг</span>
    <input class="event id_specially_number" type="text" name="specially_number" style="width: 100px" required="">
    <span>грн</span>
</div>
имеется ввиду id перенесенные в классы, ничего работать не будет... можете даже не пробовать

Значит приводите форму к вышеприведенному формату и можете смело добавлять следующий JS-код
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(function(){
    var copy = document.querySelector('.field.inline.specially').cloneNode(true);
    document.querySelector('html').addEventListener('input', function(e){
        if(e.target.classList.contains('event') && e.target.tagName == 'INPUT'){
            var error = 0;
            for(var evt of document.querySelectorAll('.field.inline.specially input.event')){
                evt.value = evt.value.replace(/[^\d]/,'');
                if(!evt.value || +evt.value < 1) error++;
            }
            if(!error){
                var last = document.querySelectorAll('.field.inline.specially');
                last[last.length-1].insertAdjacentHTML('afterEnd', copy.outerHTML);
            }
        }
    });
})();
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓

На всякий случай страница целиком- так она выглядит в браузере
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
29
30
31
32
33
34
35
36
37
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Код</title>
</head>
<body>
 
<div class="field inline specially">
    <label class="subhead" for="specially_price">Специальная цена от:</label>
    <input class="event id_specially_price" type="text" name="specially_price" style="width: 165px" required="">
    <span>кг</span>
    <input class="event id_specially_number" type="text" name="specially_number" style="width: 100px" required="">
    <span>грн</span>
</div>
 
<script>
    (function(){
        var copy = document.querySelector('.field.inline.specially').cloneNode(true);
        document.querySelector('html').addEventListener('input', function(e){
            if(e.target.classList.contains('event') && e.target.tagName == 'INPUT'){
                var error = 0;
                for(var evt of document.querySelectorAll('.field.inline.specially input.event')){
                    evt.value = evt.value.replace(/[^\d]/,'');
                    if(!evt.value || +evt.value < 1) error++;
                }
                if(!error){
                    var last = document.querySelectorAll('.field.inline.specially');
                    last[last.length-1].insertAdjacentHTML('afterEnd', copy.outerHTML);
                }
            }
        });
    })();
</script>
 
</body>
</html>
Вот она в действии -> https://codepen.io/Mr_Sergo/pe... itors=1000

Если после всего проделанного не будет работать- дайте знать, есть еще кое-какие мысли.

Добавлено через 3 минуты
При вводе чисел меньше единицы новые формы не будут добавляться на страницу- если этого не нужно дайте знать.
1
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
02.03.2019, 14:50  [ТС]
Mr_Sergo, спасибо, заработало. осталось только понять, как вы к этому пришли)

Добавлено через 3 минуты
а то для меня это сейчас просто набор буков((
пойду доки читать, по каждому слову
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
02.03.2019, 15:27
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
спасибо,
Не за что, рад что труды были не напрасны
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
как вы к этому пришли
В данном случае методом тыка ибо с Джанго и питоном я абсолютно не знаком и понятия не имею что там и как происходит.
Отдельное спасибо скажите Jabbson- только после его слов я понял как нужно действовать в данной ситуации
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2019, 15:27
Помогаю со студенческими работами здесь

Как на форме создать еще одну форму?
как на форме создать еще одну форму? то есть создать кнопку,нажимая на которую, появляется еще одна форма? написала так Private Sub...

Как создать в форме ещё одну форму ?
Вот как тут

Как добавить еще одну матрицу
Создал матрицу и к ней нужно добавить еще одну матрицу и сравнить их через Equals (ToString)

Как добавить еще одну строку в таблицу?
Мне нужно добавить еще один столбец в таблицу qt.Как это сделать? QRegExp regExp(m_regExpStrCount.at(indx), Qt::CaseInsensitive); ...

Как добавить в график еще одну функцию?
В полярных координатах нужно реализовать траекторию по 2 точкам, скорость, ускорение, радиус кривизны. Осталось добавить последнее. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru