Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 04.11.2018, 02:37
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от j0hnik Посмотреть сообщение
наверное API, а не IP
Да, API. Я в чужом тексте наверное увидел бы и заметил, а когда сам писал даже не задумывался и вряд ли когда обнаружил бы такой прокол.

Спасибо! Это именно то что мне нужно.
Ответить с цитированием
  #12 (permalink)  
Старый 04.11.2018, 02:49
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

zzz.onclick = e => document.execCommand('undo');
yyy.onclick = e => document.execCommand('redo');

А можно спросить, часто здесь и в учебнике вижу в коде как дом-элементы по id пишут в короткой форме:
zzz.onclick и yyy.onclick

Так можно всегда писать или это примочки сайта, а в коде следует писать document.querySelector('#zzz')
Ответить с цитированием
  #13 (permalink)  
Старый 04.11.2018, 07:27
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

MC-XOBAHCK,
http://w3c.github.io/html/browsers.h...-window-object
браузеры поддерживают, но в боевом коде рекомендуют по старинке.
Ответить с цитированием
  #14 (permalink)  
Старый 04.11.2018, 08:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

MC-XOBAHCK,
j0hnik,
ввожу четыре символа, как мне вернутся к состоянию, когда было 2 символа, а затем когда было 3?
Ответить с цитированием
  #15 (permalink)  
Старый 04.11.2018, 08:15
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

рони,
<textarea id="text"></textarea>
	<button id="zzz">ctrl+Z</button>
	<button id="yyy">ctrl+Y</button>
	<script>

		text.oninput = e => {
			text.blur();
			text.focus();
		};
		zzz.onclick = e =>document.execCommand('undo');
		yyy.onclick = e => document.execCommand('redo');
</script>
Ответить с цитированием
  #16 (permalink)  
Старый 04.11.2018, 08:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

j0hnik,
Ответить с цитированием
  #17 (permalink)  
Старый 04.11.2018, 08:30
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Если использовать стандартное сочетание Command-Z, то оно откатит вас к состоянию, когда вы сфокусировались на элементе. Command-Shift-Z возвратит к исходному. Чтобы это происходило по одному символу, нужно потерять и сразу возвратить фокус. Но действительно ли это нужно? Я считаю, что это усложнение. Мне показалось, что по словам лучше, наверное для разных целей подойдёт разный откат.

<button onclick="document.execCommand('undo')">Отменить</button>
<button onclick="document.execCommand('redo')">Возвратить</button>
<p>
  <textarea oninput="" placeholder="Стандартный откат"></textarea>
  <textarea oninput="this.blur();this.focus();" placeholder="по одному символу"></textarea>
  <textarea oninput="if(/[\s,.!?]/.test(event.data)) { this.blur();this.focus(); }" placeholder="по слову"></textarea>
</p>


Кнопки должны быть рядом с текстовым полем, или более точней они должны быть в поле видимости, ведь во время отката, фокус может переместиться с кнопки на элемент, а на планшете или телефоне нет возможности нажать Command-Z. Я к тому, что на сенсорных устройствах может не быть возможности совершить такой откат, кроме того, чтобы нажать на нашу придуманную кнопку.

Сообщение от MC-XOBAHCK
часто здесь и в учебнике вижу в коде как дом-элементы по id пишут в короткой форме
В стандарте HTML 5.2 о поимённом доступе к элементам сказано:

Цитата:
Возвращает указанный элемент или коллекцию элементов.
Как правило, полагаясь на это, вы получите ломающийся код. То, какие идентификаторы перестанут подходить к этому API, может меняться со временем, так как, например, новые функции добавляются к веб-платформе. Вместо этого используйте document.getElementById() или document.querySelector ().
Например, если у вашего элемента идентификатор alert, то он не может быть получен при помощи этого API, поскольку функция с соответствующим именем уже определена в глобальном контексте. (alert-у присвоена именно функция)

Важно понимать, что это происходит именно из-за того, что идентификаторы в глобальном контексте используются, где может произойти конфликт с другими, уже назначенными свойствами объекта window.

Конечно это можно исправить...
for(const element of document.querySelectorAll("[id]")) {
	window[element.id] = element;
}

Но лучше поимённый доступ к элементам сделать не через глобальный объект, а через свой. И даже гарантированно будет работать
Сообщение от j0hnik
в боевом коде
const $ = {};

for(const element of document.querySelectorAll("[id]")) {
	$[element.id] = element;
}

// пример
$.zzz.onclick = e => document.execCommand('undo');
$.yyy.onclick = e => document.execCommand('redo');
Правда, классно?

Или даже так...
const $ = new Proxy({}, { get(_, id) { return document.getElementById(id) } });

// пример
$.zzz.onclick = e => document.execCommand('undo');
$.yyy.onclick = e => document.execCommand('redo');

Вообще супер, правда?

Последний раз редактировалось Malleys, 04.11.2018 в 10:03. Причина: 1. Кнопки должны быть в поле видимости 2. Поимённый доступ к элементам
Ответить с цитированием
  #18 (permalink)  
Старый 04.11.2018, 17:36
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от Malleys
Кнопки должны быть рядом с текстовым полем, или более точней они должны быть в поле видимости
У меня при фокусе на элементе сделана подсветка через стили, поэтому я потерю фокуса сразу увидел и осознал. Кнопки сделал так как вы говорите - в поле видимости и в кастомном контекстном меню на элементе.

Сообщение от Malleys
Правда, классно?
Да
Сообщение от Malleys
Вообще супер, правда?
Правда.

Я так смотрю на этот код и если правильно понимаю, то во всём этом есть своя определённая выгода, пока непонятная мне. Прописать querySelector('#') меня не обременяет.
Наверное это очень удобно применять на элементы сгенерированные приложением.

После вашего решения с объединением ячеек, я как по щелчку внезапно для себя перешёл с функционального стиля написания кода на объектно-ориентированный. Теперь у меня всё по полочкам. Внедрить в приложение данное решение теперь для меня сущий пустяк. Буду пробовать и осознавать в чём выгода.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать смену порядка перетаскиванием MC-XOBAHCK Общие вопросы Javascript 3 19.08.2018 19:13
как присвоить путь картинки через js SolomonRei Элементы интерфейса 1 24.04.2018 21:34
Вывод кликабельных изображений только через js как? panikajo Общие вопросы Javascript 4 07.12.2017 12:54
Как подключить данные с PHP по средствам JS на удаленный сервер. Nyam Элементы интерфейса 13 11.04.2014 17:14
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29