ограничение ввода Maxlength
Подскажите пожалуйста, у меня есть таблица, некоторые ячейки открываются для ввода (рандомно), мне нужно чтобы туда можно было ввести только 1 цифру с 1 до 9.
Желательно сделать это через JS. Я пробовала пройти по нужным мне ячейкам в джаве и сделать: tbl.rows[i].cells[j].maxLength='1'; но это не работает. пробовала в самой таблице в html сделать: <tr> <td id='c0'class="my-td"maxLength='1'></td> <td id='c1'class="my-td"maxLength='1'></td> <td id='c2'class="my-td"maxLength='1'></td> </tr> но также никакого эффекта... |
Цитата:
<style>
table {
border-collapse: collapse;
}
td {
border: 1px solid #ddd;
padding: 6px;
}
</style>
<table>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr>
</table>
<script>
var tbl = document.querySelector('table');
tbl.addEventListener('mousedown', function(e) {
e.target.contentEditable = e.target.contentEditable=="inherit" || e.target.contentEditable=="false" ? true : false
});
tbl.addEventListener('input', function(e) {
e.target.textContent = e.target.textContent.replace(/\D|0/,'').replace(/(\d)\d+/,'$1')
});
</script>
|
laimas, иногда можно вводить, а иногда не можно, если нажимать мышкой!
Притом только с клавиатуры вообще нельзя вводить! (ЕЩЁ притом, если сначала нажимать мышкой, то потом можно вводить только с клавиатуры в те ячейки, на которые нажимали мышкой) Если нажать мышкой так, чтобы каретка появилась после цифры в таблице, и нажать на число на клавиатуре, то число не вводится, а каретка перескакивает в начало ввода! Если вставить или перетащить текст, то из него удаляется первый не цифровой символ, а остальное вставляется как есть! Тоже самое происходит при голосовом вводе. Если выделить ввод и ввести не цифру, то всё исчезнет! |
Malleys,
естественно, ибо если заниматься позицией курсора, то так просто не получится, если еще и копирование учитывать, то нужно обрабатывать и это событие, если не цифровой ввод анализировать "а чем?", то надо определить чем менять, и прочие возможные если. А пример все лишь отвечает на вопрос, что у td нет и не может быть никакого maxLength, который бы сам по себе на что-то влиял. |
Цитата:
Цитата:
Цитата:
Цитата:
<style>
table {
border-collapse: collapse;
}
td {
border: 1px solid #ddd;
padding: 6px;
}
</style>
<table>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr>
</table>
<script>
const table = document.querySelector("table");
for(const cell of table.querySelectorAll("td, th")) {
cell.tabIndex = 0;
cell.contentEditable = true;
cell.dataset.value = cell.textContent;
}
table.addEventListener("input", ({ target }) => {
let value = target.textContent.replace(target.dataset.value, "");
value = value || target.textContent;
value = value.replace(/[^1-9]/g, "").slice(0, 1) || target.dataset.value;
target.textContent =
target.dataset.value =
value;
});
</script>
laimas, любое иное нажатие не должно менять исходный ввод, так ведь? |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Вы как то усложнили до небес. Это судоку, часть ячеейк заполнена автоматически (их нельзя изменять) часть нет. Там где не заполнены нам нужно написать число от 1 до 9, при попытке нажать что то еще или букву просто ничего не произойдет. На данный момент я в пустую ячейку судоку могу хоть целый роман написать. Вот и спрашиваю как ограничить...
|
| Часовой пояс GMT +3, время: 07:58. |