[html]<style>
.num-table {
border-collapse: collapse;
margin: 15px 0;
width: auto;
}
.num-table td {
width: 52px;
height: 52px;
padding: 0;
text-align: center;
font: bold 20px/52px Arial, sans-serif;
background: #f0f8ff;
border: 2px solid #4a90d9;
border-radius: 8px;
cursor: pointer;
transition: all 0.15s ease;
user-select: none;
}
.num-table td:hover {
background: #d4e4ff;
transform: scale(1.05);
border-color: #2a6fc9;
}
.num-table td:active {
transform: scale(0.92);
background: #b6d4ff;
}
.num-table td.taken {
background: #d4edda;
border-color: #28a745;
cursor: default;
opacity: 0.7;
}
.num-table td.taken:hover {
transform: none;
background: #d4edda;
}
.num-table td.my-take {
background: #ffd700;
border-color: #ff8c00;
transform: scale(1.05);
}
.num-hint {
font: 14px Arial, sans-serif;
color: #333;
margin: 5px 0 8px 0;
}
.num-status {
font: 13px Arial, sans-serif;
color: #28a745;
margin: 5px 0;
min-height: 20px;
}
</style>
<script>
// === Функция должна быть определена до использования ===
function takeNumber(num) {
// Отладка: убедимся, что клик сработал
// alert('Клик по номеру ' + num); // раскомментируйте для проверки
var status = document.getElementById('numStatus');
if (!status) {
// если нет блока статуса, создадим
status = document.createElement('div');
status.id = 'numStatus';
document.querySelector('.num-table').after(status);
}
// Проверка занятости
var taken = [];
try {
var data = localStorage.getItem('takenNumbers');
if (data) taken = JSON.parse(data);
} catch(e) {}
if (taken.includes(num)) {
status.textContent = '❌ Номер ' + num + ' уже занят!';
status.style.color = '#dc3545';
return;
}
// Поиск поля ввода (приоритет #main-reply)
var replyField = document.getElementById('main-reply');
if (!replyField) {
replyField = document.querySelector('textarea[name="message"]');
}
if (!replyField) {
replyField = document.querySelector('textarea[name="msg"]');
}
if (!replyField) {
replyField = document.querySelector('#postform textarea');
}
if (!replyField) {
replyField = document.querySelector('.resizable-textarea textarea');
}
if (!replyField) {
replyField = document.querySelector('textarea'); // последняя надежда
}
var phrase = 'беру номер ' + num;
if (replyField) {
replyField.value = phrase;
replyField.focus();
replyField.select();
// Триггеры для реактивных фреймворков
var evt = new Event('input', { bubbles: true });
replyField.dispatchEvent(evt);
replyField.dispatchEvent(new Event('change', { bubbles: true }));
status.textContent = '✅ Выбран номер ' + num + ' (отправьте сообщение)';
status.style.color = '#28a745';
} else {
// Запасной вариант – копирование в буфер
try {
navigator.clipboard.writeText(phrase).catch(function() {
var textarea = document.createElement('textarea');
textarea.value = phrase;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
});
} catch(e) {
// если и это не работает – покажем alert
alert('Поле ввода не найдено! Скопируйте вручную: ' + phrase);
}
status.textContent = '⚠ Поле не найдено, текст скопирован в буфер';
status.style.color = '#ff8c00';
}
// Сохраняем выбранный номер для последующего закрепления
window.mySelected = num;
// Обновляем внешний вид
updateCells();
}
// === Функция обновления ячеек ===
function updateCells() {
var taken = [];
try {
var data = localStorage.getItem('takenNumbers');
if (data) taken = JSON.parse(data);
} catch(e) {}
var mySel = window.mySelected || null;
var cells = document.querySelectorAll('.num-table td');
cells.forEach(function(cell) {
var num = parseInt(cell.textContent);
cell.classList.remove('taken', 'my-take');
if (taken.includes(num)) {
cell.classList.add('taken');
}
if (mySel === num) {
cell.classList.add('my-take');
}
});
}
// === Функция сохранения номера после отправки ===
function saveMyNumber() {
if (window.mySelected === undefined || window.mySelected === null) return;
var num = window.mySelected;
var taken = [];
try {
var data = localStorage.getItem('takenNumbers');
if (data) taken = JSON.parse(data);
} catch(e) {}
if (!taken.includes(num)) {
taken.push(num);
try {
localStorage.setItem('takenNumbers', JSON.stringify(taken));
} catch(e) {}
var status = document.getElementById('numStatus');
if (status) {
status.textContent = '✅ Номер ' + num + ' закреплён!';
status.style.color = '#28a745';
}
window.mySelected = null;
updateCells();
}
}
// === Отслеживание отправки формы ===
function setupListeners() {
// Все формы на странице
var forms = document.querySelectorAll('form');
forms.forEach(function(form) {
form.addEventListener('submit', function() {
setTimeout(saveMyNumber, 600);
});
});
// Кнопки отправки
var buttons = document.querySelectorAll('input[type="submit"], button[type="submit"], .button, input[name="post"]');
buttons.forEach(function(btn) {
btn.addEventListener('click', function() {
setTimeout(saveMyNumber, 600);
});
});
}
// === Инициализация при загрузке ===
window.addEventListener('DOMContentLoaded', function() {
updateCells();
setupListeners();
console.log('✅ Скрипт загружен. Нажми на любой номер.');
});
</script>
<div class="num-hint">🔢 Нажми на номер — он появится в поле ответа:</div>
<table class="num-table">
<tr>
<td onclick="takeNumber(1)">1</td>
<td onclick="takeNumber(2)">2</td>
<td onclick="takeNumber(3)">3</td>
<td onclick="takeNumber(4)">4</td>
<td onclick="takeNumber(5)">5</td>
</tr>
<tr>
<td onclick="takeNumber(6)">6</td>
<td onclick="takeNumber(7)">7</td>
<td onclick="takeNumber(8)">8</td>
<td onclick="takeNumber(9)">9</td>
<td onclick="takeNumber(10)">10</td>
</tr>
<tr>
<td onclick="takeNumber(11)">11</td>
<td onclick="takeNumber(12)">12</td>
<td onclick="takeNumber(13)">13</td>
<td onclick="takeNumber(14)">14</td>
<td onclick="takeNumber(15)">15</td>
</tr>
<tr>
<td onclick="takeNumber(16)">16</td>
<td onclick="takeNumber(17)">17</td>
<td onclick="takeNumber(18)">18</td>
<td onclick="takeNumber(19)">19</td>
<td onclick="takeNumber(20)">20</td>
</tr>
<tr>
<td onclick="takeNumber(21)">21</td>
<td onclick="takeNumber(22)">22</td>
<td onclick="takeNumber(23)">23</td>
<td onclick="takeNumber(24)">24</td>
<td onclick="takeNumber(25)">25</td>
</tr>
<tr>
<td onclick="takeNumber(26)">26</td>
<td onclick="takeNumber(27)">27</td>
<td onclick="takeNumber(28)">28</td>
<td onclick="takeNumber(29)">29</td>
<td onclick="takeNumber(30)">30</td>
</tr>
</table>
<div class="num-status" id="numStatus">✅ Выберите номер</div>[/html]











































