Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/55: Рейтинг темы: голосов - 55, средняя оценка - 4.69
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 101

Динамическая таблица

14.04.2016, 17:10. Показов 10932. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два скрипта:
Первый
HTML5
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
    <div id="table_wrapper">
    <table id="my_table">
      <tr>
        <td></td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td></td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
    </table>
    <span id="add_date">+</span>
    <span id="add_row">+</span>
</div>
     
<script type="text/javascript">
 
            var tbl = document.getElementById('my_table'),
                trs = tbl.getElementsByTagName('tr'),
                cnt = trs.length;
 
            document.getElementById('add_date').onclick = function(){
                var i = 0;
                for(i; i < cnt; i++){
                    var c = i > 1 ? 3 : 2,
                        x = trs[i].insertCell(c);
                    x.innerHTML='&nbsp';
                }
            }; 
        </script>
добавляет столбцы в таблицу
и второй
HTML5
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
<script type="text/javascript">
var d = document;
var last_id = 0;
function add_value_f() {
     
    var tbody = d.getElementById('my_table');
     
    var row = d.createElement("tr");
    tbody.appendChild(row);
 
    var td1 = d.createElement("td");
    var td2 = d.createElement("td");
    var td3 = d.createElement("td");
 
    row.appendChild(td1);
    row.appendChild(td2);
    row.appendChild(td3);
     
    last_id = last_id + 1;
    td1.innerHTML = '<input type="text" name="xml_id['+last_id+']">';
    td2.innerHTML = '<input type="text" name="values['+last_id+']">';
    td3.innerHTML = '<input type="text" name="val_sort['+last_id+']">';
}
 
</script>
<table border="1" id="my_table">
<tr>
    <td><input type="text" name="xml_id[0]"></td>
    <td><input type="text" name="values[0]"></td>
    <td><input type="text" name="val_sort[0]"></td>
</tr>
</table>
<input type="button" onclick="add_value_f()" value="Добавить поле"/>
добавляет строки с полями.
Вопрос, как объединить эти два скрипта для работы над одной таблицей(естественно в ячейках таблицы буду текстовые поля)?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2016, 17:10
Ответы с готовыми решениями:

Динамическая таблица
Ребят,дали такое задание: По заполненной экзаменационной ведомости (таблица: фамилия студента – оценка на экзамене) создать сводку...

Динамическая таблица на JavaScript
Добрый день, нужна ваша помощь =( Мне нужно сделать динамическую таблица с двумя импутами в которые вводишь число строк и столбцов и...

Динамическая таблица javascript
Требуется создать динамическую таблицу. Вначале в поле ввода количества столбцов и строк мы вводим нужное их количество. По нажатию кнопки...

14
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
14.04.2016, 18:55
оба кода совершенно бредовые (и где вы только такой ужас находите?) -- зачем их ещё и объединять?
опишите лучше словами свою задачу
0
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 101
15.04.2016, 09:38  [ТС]
Бредовые? Я эти коды нашёл на этом форуме, и представили их не новички, а опытные ребята. По отдельности они отлично работают. Простите за мои слова, но если вы не можете ил не знаете как это объединить, то зачам говорить что чей-то код - бредовый? Могли бы просто не отвечать

Добавлено через 21 минуту
Прошу прощения за грамматику
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
15.04.2016, 12:38
1. разумный и опытный человек не будет использовать конструкцию tbl.getElementsByTagName('tr'), он использует tbl.rows -- это про первый из ваших кодов

2. разумный и опытный человек не будет использовать два метода : createElement () и appendChild () для создания ячейки, он использует для этого один метод insertCell () -- это ко второму вашему коду

но, как говорится, насильно мил не будешь
так что... успехов вам в "объединении"!
не забудьте только, что при арифметическом объединении объём бреда удвоится
0
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 101
15.04.2016, 12:53  [ТС]
Я спорить не буду на счёт разумности той или иной функции и разумности пользователей данного форума, которые и предоставили эти коды, иначе бы не обращался за помощью.
Если у вас есть решение данной проблемы куда лучше данной проблемы - пожалуйста, предложите. Лично мне любой вариант интересен, т.к. я всё же больше силён в вёрстке страниц, нежели в их интерактивизации

Добавлено через 10 минут
Если у вас есть решение данной проблемы куда лучше - пожалуйста, предложите. *правка
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
15.04.2016, 13:06
первый код добавляет к таблице столбец с пустыми (пробельными) ячейками
второй код добавляет к таблице строку, идентичную последней существующей строке, но инкрементируя индексы в значениях атрибута NAME текстовых полей ячеек

вам, как я понял, пустые (пробельные) столбцы добавлять не нужно
вам нужно добавлять столбцы с ячейками, в которых будут текстовые поля
ну и какая логическая связь будет между инпутами существующего последнего столбца и новыми добавляемыми?
0
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 101
15.04.2016, 13:14  [ТС]
Я немного не то сюда отправил. Вместо input должны быть textarea. Логика такова, что после отправки данных на сервер будут созданы массивы(каждый столбец - это массив) с данными и текстовых полей. Данная функция уже есть РНР части, но для её реализации отсутствуют таблица, которая строится динамически.

Оба кода я показываю в качестве примера того, что должно происходить с таблицей. "Объединение" не заключается в объединении данных кодов, в объединении предоставляемых ими операций. Прошу прощения за не ясность моего первого сообщения
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
15.04.2016, 13:52
ds
Цитата Сообщение от Noob Progaramm Посмотреть сообщение
Прошу прощения за не ясность моего первого сообщения
вы и сейчас не очень ясно изложили -- что же вам нужно?
положим, имеется таблица из трёх столбцов (колонок), озаглавленных Фамилия, Имя, Отчество

в первой колонке, начиная со второй строки имеются текстовые поля с именами:
NAME= "surname [0]"
NAME="surname [1]"
NAME="surname [2]"

во второй колонке поля с именами:
NAME= "name [0]"
NAME="name [1]"
NAME="name [2]"
в третьем столбце поля с именами
NAME= "patronymic [0]"
NAME="patronymic [1]"
NAME="patronymic [2]"

когда добавляем строку, то в ней будет три ячейки с аналогичными именами:
NAME= "surname [3]", NAME="name [3]", NAME="patronymic [3]"
и с этим всё понятно

а вот какой заголовок в первой строке и какие имена полей (начиная со второй строки) должны появиться у первого добавляемого столбца?
у второго?
у третьего?

так что возвращаю вас к моему первому сообщению:
Цитата Сообщение от kalabuni Посмотреть сообщение
опишите словами свою задачу
0
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 101
15.04.2016, 13:58  [ТС]
Хорошо, словами так словами. Мне нужна таблица, у которой можно прибавить колонки(1,2,3..н) по нажатию одной кнопки и строчки по нажатию другой. Также во всех ячейках таблицы должны быть текстовые поля. Пытался своими ручками писать - не получилось. Потом нашёл данные коды и хотел на их примере слепить скрипт - тоже не получилось.
По сути, нужнo, грубо говоря, подобие Exel на JS
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
15.04.2016, 14:29
повторяю свой вопрос иными словами
откуда браузер узнает -- какой заголовок нужно прописать у добавляемой колонки?
откуда браузер узнает -- какие имена нужно прописывать полям ячеек в добавляемой колонке?

браузер -- он не ясновидящий, ваши мысли угадывать не умеет



Добавлено через 23 минуты
---------------------
задумались?
предлагаю:
вариант 1 -- при нажатии на кнопку "добавить колонку" всплывает окошко с двумя полями, куда вы вводите заголовок колонки и маску имени полей

вариант 2 -- изначально имеете два массива, первый с заголовками добавляемых колонок, второй с маской имен полей (но здесь количество добавлений колонок получается ограниченным)

при обоих вариантах нажатие на кнопку "добавить строку" работает без всплывающего окошка, маску имен полей браузер берёт из последней существующей строки (добавить можно любое количество строк)
0
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 101
15.04.2016, 14:36  [ТС]
А разве нельзя циклично присваивать имена? То есть есть скажем изначальное имя neme1, а имена всех остальных будут name[i]. При этом размер массива с именами будет увеличиваться на +1 каждый раз, как мы нажмём на Добавить колонку
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
15.04.2016, 15:29
как вы потом на сервере после отправки формы эту муть будете разбирать -- я не представляю

ладно, сейчас напишу -- это недолго
0
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 101
15.04.2016, 15:37  [ТС]
Ну мне главное чтобы макет хоть какой-то перед глазами был, а с разбором на сервере уже потом разберусь
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
15.04.2016, 18:51
Лучший ответ Сообщение было отмечено Noob Progaramm как решение

Решение

сделал с "бонусом" (с удалением строк и колонок)
HTML5
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<style>
a {display: inline-block; margin: 23px; color: teal}
table {margin: 23px; border-collapse: collapse}
input {width: 54px; margin: 0; border: none; width: 100%}
</style>
 
<a href="javascript: addROW ()">добавить строку в конец таблицы</a>
<a href="javascript: remROW ()" style="color:red">удалить нижнюю строку</a>
<hr align="left" noshade size="0" width="35%">
<a href="javascript:addCOL ()">добавить столбец справа</a>
<a href="javascript:remCOL ()" style="color:red">удалить крайний правый столбец</a>
 
 
<table id="tbl" cellspacing="0" cellpadding="0" border>
<tr><td><input name="n0_0"></td><td><input name="n0_1"></td><td><input name="n0_2"></td></tr>
<tr><td><input name="n1_0"></td><td><input name="n1_1"></td><td><input name="n1_2"></td></tr>
<tr><td><input name="n2_0"></td><td><input name="n2_1"></td><td><input name="n2_2"></td></tr>
</table>
 
<script>
function addROW ()
{
var T = document.getElementById ('tbl');
var ro = T.insertRow (-1);
for (var j = 0, J = T.rows [0].cells.length; j < J; j++)
   {
   var inp = document.createElement ('input');
   inp.name = inp.value = 'n' + (T.rows.length - 1) +'_' + j;
   var ce = ro.insertCell (-1)
   ce.appendChild (inp);
   }
}
 
function remROW ()
{
var T = document.getElementById ('tbl';
if (T.rows.length < 2) {alert ('В таблице должна остаться хотя бы одна строка. Команда отменена.'); return}
T.deleteRow (T.rows.length - 1);
}
 
function addCOL ()
{
var T = document.getElementById ('tbl');
for (var j = 0, J = T.rows.length; j < J; j++)
   {
   var inp = document.createElement ('input');
   inp.name = inp.value = 'n' + j +'_' + T.rows [j].cells.length;
   var ce = T.rows [j].insertCell (-1)
   ce.appendChild (inp);
   }
}
 
function remCOL ()
{
var T = document.getElementById ('tbl');
if (T.rows [0].cells.length < 2) {alert ('В таблице должен остаться хотя бы один столбец. Команда отменена.'); return}
for (var j = 0, J = T.rows.length; j < J; j++) {var ceL = T.rows [j].cells.length; if (ceL > 1) T.rows [j].deleteCell (ceL - 1)}
}
</script>
тестируйте (здесь для проверки в полях прописываются их имена)
1
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 101
15.04.2016, 21:25  [ТС]
То что нужно. Премного благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2016, 21:25
Помогаю со студенческими работами здесь

Динамическая таблица + подсчет двух ячеек
Всем привет! Возникла проблема с динамической таблицей. Имеется динамическая таблица(по нажатию добавляется строка), есть графа...

Динамическая таблица
Добрый день! Не могу разобраться в JavaScrip? помогите, please! Есть таблица html: &lt;form method=&quot;post&quot;...

Динамическая таблица с фиксированной шапкой
Добрый день Пытаюсь динамически создать таблицу с фиксированной шапкой но никак не получается выровнять ширину колонок шапки с шириной...

Динамическая таблица
Ребята, делал кто нибудь динамические таблицы? Что бы можно было добавлять строки, ячейки, редактировать в них данные без перезагрузки...

Динамическая иерархическая таблица из БД
Здравствуйте! Такая проблема, нужно создать иерархическую таблицу html(Прикрепленное изображение(Итоговая) 1), формируя ее из данных в...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru