С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,865

Редактирование TD по клику

11.07.2025, 11:46. Показов 911. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделать ячейки таблицы редактируемыми по клику.
По клику - ячейка должна стать "редактируемой" (textarea появляется внутри). Изменение размера ячейки должно быть отключено. Кнопки OK и ОТМЕНА появляются ниже ячейки и, соответственно, завершают/отменяют редактирование.
Только одну ячейку можно редактировать за один раз. Пока <td> в "режиме редактирования", клики по другим ячейкам игнорируются. Таблица может иметь множество ячеек. Используйте делегирование событий.
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
60
61
62
63
64
65
66
67
68
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
  <link rel="stylesheet" href="bagua.css">
  <link rel="stylesheet" href="my.css">
  <p>Кликните на ячейку таблицы, чтобы отредактировать её. Нажмите ОК или ОТМЕНА, когда закончите.</p>
  <table id="bagua-table">
    <tr>
      <th colspan="3">Квадрат <em>Bagua</em>: Направление, Элемент, Цвет, Значение</th>
    </tr>
    <tr>
      <td class="nw"><strong>Северо-Запад</strong>
        <br>Металл
        <br>Серебро
        <br>Старейшины
      </td>
      <td class="n"><strong>Север</strong>
        <br>Вода
        <br>Синий
        <br>Перемены
      </td>
      <td class="ne"><strong>Северо-Восток</strong>
        <br>Земля
        <br>Жёлтый
        <br>Направление
      </td>
    </tr>
    <tr>
      <td class="w"><strong>Запад</strong>
        <br>Металл
        <br>Золото
        <br>Молодость
      </td>
      <td class="c"><strong>Центр</strong>
        <br>Всё
        <br>Пурпурный
        <br>Гармония
      </td>
      <td class="e"><strong>Восток</strong>
        <br>Дерево
        <br>Синий
        <br>Будущее
      </td>
    </tr>
    <tr>
      <td class="sw"><strong>Юго-Запад</strong>
        <br>Земля
        <br>Коричневый
        <br>Спокойствие
      </td>
      <td class="s"><strong>Юг</strong>
        <br>Огонь
        <br>Оранжевый
        <br>Слава
      </td>
      <td class="se"><strong>Юго-Восток</strong>
        <br>Дерево
        <br>Зеленый
        <br>Роман
      </td>
    </tr>
</table>
  <script src="script.js"></script>
</body>
</html>
CSS
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
th {
  text-align: center;
  font-weight: bold;
}
 
td {
  width: 150px;
  white-space: nowrap;
  text-align: center;
  vertical-align: middle;
  padding: 10px;
}
 
.nw {
  background-color: #999;
}
 
.n {
  background-color: #03f;
  color: #fff;
}
 
.ne {
  background-color: #ff6;
}
 
.w {
  background-color: #ff0;
}
 
.c {
  background-color: #60c;
  color: #fff;
}
 
.e {
  background-color: #09f;
  color: #fff;
}
 
.sw {
  background-color: #963;
  color: #fff;
}
 
.s {
  background-color: #f60;
  color: #fff;
}
 
.se {
  background-color: #0c3;
  color: #fff;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.07.2025, 11:46
Ответы с готовыми решениями:

Появление элемента по клику на кнопку и скрытие элемента по клику на любое место body
Задача стоит такая. Нужно сделать так, чтобы по клику на button class=&quot;helper&quot; наш div id =...

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

Редактирование по двойному клику
Есть список дел, в нем должна быть реализована функция редактирования поля по двойному клику на...

4
 Аватар для DmitriyLutsenko
75 / 61 / 16
Регистрация: 13.07.2020
Сообщений: 259
11.07.2025, 22:09
Так?
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
let table = document.getElementById('bagua-table');
let editingTD = null;
 
table.onclick = function(event) {
  let td = event.target.closest('td');
  if (!td || editingTD)
    return;
  if (td.tagName === 'th')
    return;
  let originalHTML = td.innerHTML;
  
  let textarea = document.createElement('textarea');
  textarea.value = td.innerHTML.trim();
  textarea.style.height = td.offsetHeight + 'px';
  td.innerHTML = '';
  td.appendChild(textarea);
  td.classList.add('active');
 
  let buttons = document.createElement('div');
      buttons.className = 'buttons';
  
  let okButton = document.createElement('button');
      okButton.textContent = 'ок';
  
  let cancelButton = document.createElement('button');
  cancelButton.textContent = 'отмена';
  
  buttons.appendChild(okButton);
  buttons.appendChild(cancelButton);
  td.appendChild(buttons);
  textarea.focus();
 
  okButton.onclick = function() {
    td.innerHTML = textarea.value;
    td.classList.remove('active');
    editingTD = null;
  };
  
  cancelButton.onclick = function() {
    td.innerHTML = originalHTML;
    td.classList.remove('active');
    editingTD = null;
  };
  
  editingTD = td;
  event.stopPropagation();
};
1
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,865
11.07.2025, 22:52  [ТС]
Цитата Сообщение от DmitriyLutsenko Посмотреть сообщение
Так?
Да, спасибо
1
98 / 94 / 17
Регистрация: 05.08.2021
Сообщений: 457
12.07.2025, 19:43
Цитата Сообщение от Whitecolor Посмотреть сообщение
Сделать ячейки таблицы редактируемыми по клику
JS в данном случае не нужен
https://developer.mozilla.org/... nteditable
0
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,865
13.07.2025, 18:50  [ТС]
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
60
61
62
63
64
65
66
67
68
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
  <link rel="stylesheet" href="bagua.css">
  <link rel="stylesheet" href="my.css">
  <p>Кликните на ячейку таблицы, чтобы редактировать её. Нажмите ОК или ОТМЕНА, когда закончите.</p>
  <table id="bagua-table">
    <tr>
      <th colspan="3">Квадрат <em>Bagua</em>: Направление, Элемент, Цвет, Значение</th>
    </tr>
    <tr>
      <td class="nw"><strong>Северо-Запад</strong>
        <br>Металл
        <br>Серебро
        <br>Старейшины
      </td>
      <td class="n"><strong>Север</strong>
        <br>Вода
        <br>Синий
        <br>Перемены
      </td>
      <td class="ne"><strong>Северо-Восток</strong>
        <br>Земля
        <br>Жёлтый
        <br>Направление
      </td>
    </tr>
    <tr>
      <td class="w"><strong>Запад</strong>
        <br>Металл
        <br>Золото
        <br>Молодость
      </td>
      <td class="c"><strong>Центр</strong>
        <br>Всё
        <br>Пурпурный
        <br>Гармония
      </td>
      <td class="e"><strong>Восток</strong>
        <br>Дерево
        <br>Синий
        <br>Будущее
      </td>
    </tr>
    <tr>
      <td class="sw"><strong>Юго-Запад</strong>
        <br>Земля
        <br>Коричневый
        <br>Спокойствие
      </td>
      <td class="s"><strong>Юг</strong>
        <br>Огонь
        <br>Оранжевый
        <br>Слава
      </td>
      <td class="se"><strong>Юго-Восток</strong>
        <br>Дерево
        <br>Зеленый
        <br>Роман
      </td>
    </tr>
</table>
  <script src="script.js"></script>
</body>
</html>
CSS
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
th {
  text-align: center;
  font-weight: bold;
}
 
td {
  width: 150px;
  white-space: nowrap;
  text-align: center;
  vertical-align: middle;
  padding: 10px;
}
 
.nw {
  background-color: #999;
}
 
.n {
  background-color: #03f;
  color: #fff;
}
 
.ne {
  background-color: #ff6;
}
 
.w {
  background-color: #ff0;
}
 
.c {
  background-color: #60c;
  color: #fff;
}
 
.e {
  background-color: #09f;
  color: #fff;
}
 
.sw {
  background-color: #963;
  color: #fff;
}
 
.s {
  background-color: #f60;
  color: #fff;
}
 
.se {
  background-color: #0c3;
  color: #fff;
}
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.edit-td .edit-area {
  border: none;
  margin: 0;
  padding: 0;
  display: block;
  resize: none;
  outline: none;
  overflow: auto;
}
 
.edit-controls {
  position: absolute;
}
 
.edit-td {
  position: relative;
  padding: 0;
}
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
let table = document.getElementById('bagua-table');
let editingTd;
table.onclick = function(event) {
  let target = event.target.closest('.edit-cancel,.edit-ok,td');
  if (!table.contains(target)) return;
  if (target.className == 'edit-cancel') {
    finishTdEdit(editingTd.elem, false);
  } else if (target.className == 'edit-ok') {
    finishTdEdit(editingTd.elem, true);
  } else if (target.nodeName == 'TD') {
    if (editingTd) return;
    makeTdEditable(target);
  }
};
 
function makeTdEditable(td) {
  editingTd = {
    elem: td,
    data: td.innerHTML
  };
 
  td.classList.add('edit-td');
  let textArea = document.createElement('textarea');
  textArea.style.width = td.clientWidth + 'px';
  textArea.style.height = td.clientHeight + 'px';
  textArea.className = 'edit-area';
  textArea.value = td.innerHTML;
  td.innerHTML = '';
  td.appendChild(textArea);
  textArea.focus();
  td.insertAdjacentHTML("beforeEnd",
    '<div class="edit-controls"><button class="edit-ok">OK</button><button class="edit-cancel">CANCEL</button></div>'
  );
}
 
function finishTdEdit(td, isOk) {
  if (isOk) {
    td.innerHTML = td.firstChild.value;
  } else {
    td.innerHTML = editingTd.data;
  }
  td.classList.remove('edit-td');
  editingTd = null;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2025, 18:50
Помогаю со студенческими работами здесь

Как реализовать возможность редактирования текста при клике на него?
Здравствуйте, как реализовать возможность редактирования текста при клике на него? Есть к примеру...

Нужно, чтобы при клике на #button фокусировался #one, при втором клике на #button фокусировался #two
$(function() { $(&quot;#button&quot;).click(function(){ $(&quot;#one&quot;).focus(); }); Это скрипт для #one, а как...

Клик на клик
Приветствую! Есть 2 ссылки: &lt;a href=&quot;#&quot; id=&quot;id1&quot;&gt;&lt;/a&gt; и &lt;a href=&quot;#&quot; id=&quot;id2&quot;&gt;&lt;/a&gt; Как...

Клик по ссыллке и клик по ссылке с выбранным чекбоксом
Есть две ссылки, одна выступает в виде кнопки... &lt;a href=&quot;{take_new_book}&quot; ...

Сделать, чтобы при клике на кнопке, блок #cont исчез, а при повторном клике блок #cont появился
Как сделать, чтобы при клике на кнопке, блок #cont исчез, а при повторном клике блок #cont...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru