Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.10.2019, 00:40
Новичок на форуме
Отправить личное сообщение для Ruru Посмотреть профиль Найти все сообщения от Ruru
 
Регистрация: 19.10.2019
Сообщений: 6

ограничение ввода 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>

но также никакого эффекта...
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2019, 05:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Ruru
екоторые ячейки открываются для ввода
contentEditable?

<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, 21.10.2019 в 07:24.
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2019, 14:03
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

laimas, иногда можно вводить, а иногда не можно, если нажимать мышкой!

Притом только с клавиатуры вообще нельзя вводить! (ЕЩЁ притом, если сначала нажимать мышкой, то потом можно вводить только с клавиатуры в те ячейки, на которые нажимали мышкой)

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

Если вставить или перетащить текст, то из него удаляется первый не цифровой символ, а остальное вставляется как есть! Тоже самое происходит при голосовом вводе.

Если выделить ввод и ввести не цифру, то всё исчезнет!

Последний раз редактировалось Malleys, 21.10.2019 в 14:09. Причина: Добавил ещё
Ответить с цитированием
  #4 (permalink)  
Старый 21.10.2019, 14:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Malleys,
естественно, ибо
если заниматься позицией курсора, то так просто не получится,
если еще и копирование учитывать, то нужно обрабатывать и это событие,
если не цифровой ввод анализировать "а чем?", то надо определить чем менять,
и прочие возможные если.
А пример все лишь отвечает на вопрос, что у td нет и не может быть никакого maxLength, который бы сам по себе на что-то влиял.
Ответить с цитированием
  #5 (permalink)  
Старый 21.10.2019, 14:32
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
никакого maxLength,
Конечно нет, речь о вашем решении.

Сообщение от laimas
если заниматься позицией курсора, то так просто не получится,
если еще и копирование учитывать, то нужно обрабатывать и это событие,
если не цифровой ввод анализировать "а чем?", то надо определить чем менять,
Для этого подходит событие input, которое вы обрабатываете.

Сообщение от laimas
если заниматься позицией курсора, то так просто не получится,
Вам это не нужно, поскольку
Сообщение от Ruru
мне нужно чтобы туда можно было ввести только 1 цифру с 1 до 9.
Я так понимаю, любым способом!

<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, любое иное нажатие не должно менять исходный ввод, так ведь?

Последний раз редактировалось Malleys, 21.10.2019 в 14:35.
Ответить с цитированием
  #6 (permalink)  
Старый 21.10.2019, 14:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Malleys
любое иное нажатие не должно менять исходный ввод, так ведь?
Вы меня об этом спрашиваете? Я даже не знаю что вообще находится в ячейках по умолчанию, это не ко мне вопрос.
Ответить с цитированием
  #7 (permalink)  
Старый 21.10.2019, 14:45
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
Я даже не знаю что вообще находится в ячейках по умолчанию, это не ко мне вопрос.
По сути должно ничего или цифра от 1 до 9. Однако, чтобы там не находилось, оно не должно сломаться, а вводиться должны только цифры от 1 до 9!
Ответить с цитированием
  #8 (permalink)  
Старый 21.10.2019, 14:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Malleys
По сути должно ничего или цифра от 1 до 9
Ну и на что менять не цифру, если ее нет, как просто не удаляя? Контактируйте с "заказчиком" о всех деталях, я не в курсе их. О курсоре, пойдет ли игнорирование его позиции (у вас это тоже) или нет и о прочем. Мне в общем все равно, не мне же нужно это.
Ответить с цитированием
  #9 (permalink)  
Старый 21.10.2019, 16:08
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
цифру, если ее нет, как просто не удаляя?
Ничего не трогать! Ведь если предполагается ввод от 1 до 9, то любые другие клавиши ведут себя так, как будто их не нажимали!

Сообщение от laimas
игнорирование его позиции (у вас это тоже)
А какая разница, где стоит каретка, если самое большое можно ввести один символ! Нужно, чтобы произошёл ввод, а у вас он не происходит!

Сообщение от laimas
не мне же нужно это.
Для кого тогда ваш пример? Чему мы можем научится из вашего примера?
Ответить с цитированием
  #10 (permalink)  
Старый 21.10.2019, 16:22
Новичок на форуме
Отправить личное сообщение для Ruru Посмотреть профиль Найти все сообщения от Ruru
 
Регистрация: 19.10.2019
Сообщений: 6

Вы как то усложнили до небес. Это судоку, часть ячеейк заполнена автоматически (их нельзя изменять) часть нет. Там где не заполнены нам нужно написать число от 1 до 9, при попытке нажать что то еще или букву просто ничего не произойдет. На данный момент я в пустую ячейку судоку могу хоть целый роман написать. Вот и спрашиваю как ограничить...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка маски ввода Intrerio Общие вопросы Javascript 0 01.03.2016 18:47
Ограничение ввода с помощью блока submit Pavel.zol Events/DOM/Window 9 14.12.2011 23:42
Зависимость полей ввода sakutylev AJAX и COMET 6 07.01.2011 17:10
Ограничение символов для ввода kotofeich Элементы интерфейса 9 04.06.2010 17:01
Переход между окнами ввода при заполнении. Бушка Общие вопросы Javascript 4 25.03.2009 15:40