У меня есть простая текстовая область HTML на моей стороне. Прямо сейчас, если вы нажмете вкладку в нем, он перейдет к следующему полю. Я хотел бы сделать отступ для кнопки табуляции на несколько пробелов вместо этого. Как я могу это сделать? Спасибо.
143
Ответы:
Заимствование из других ответов на аналогичные вопросы (опубликовано ниже) ...
JQuery: как захватить нажатие клавиши TAB в текстовом поле
Как обращаться с <tab> в textarea?
http://jsfiddle.net/jz6J5/
источник
Это решение не требует jQuery и включает функциональность вкладок для всех текстовых областей на странице.
источник
this.selectionEnd = s+1;
наthis.selectionEnd = s + "\t".length;
. Было бы чётче использовать переменную или параметр функции и хранить там символы для отступов. Но вы знаете, что заменить сейчас:+1
определяет, на сколько символов перемещается каретка.KeyboardEvent.keyCode
иKeyboardEvent.which
являются устаревшими свойствами. ИспользуйтеKeyboardEvent.key
вместо этого.Как написали другие, вы можете использовать JavaScript для захвата события, предотвращения действия по умолчанию (чтобы курсор не смещал фокус) и вставки символа табуляции.
Но отключение поведения по умолчанию делает невозможным перемещение фокуса из текстовой области без использования мыши. Слепые пользователи взаимодействуют с веб-страницами, используя клавиатуру и ничего больше - они не могут видеть указатель мыши, чтобы сделать что-нибудь полезное с ним, поэтому это клавиатура или ничего. Клавиша табуляции является основным способом навигации по документу, особенно по формам. Переопределение поведения по умолчанию клавиши табуляции сделает невозможным для слепых пользователей переместить фокус на следующий элемент формы.
Так что , если вы пишете веб - сайт для широкой аудитории, я бы не рекомендовал делать это без принуждения причины, и обеспечить какое - то альтернативу для пользователей слепых , которые не заманивают их в текстовом поле.
источник
Для чего это стоит, вот мой oneliner, для чего вы все говорили в этой теме:
Тестирование в последних версиях Chrome, Firefox, Internet Explorer и Edge.
источник
if(event.shiftKey){if(v.substring(s-1,s)==='\t'){this.value=v.substring(0,s-1)+v.substring(e);this.selectionStart=this.selectionEnd=s-1;}}
Вот моя версия этого, поддерживает:
источник
Современный способ, который является простым и не теряет способность отменить (Ctrl + Z) последние изменения.
Подробнее о
execCommand
:Редактировать:
Как указано в комментарии (и хотя это было «современное» решение ), эта функция устарела. Цитирование документов:
источник
indent-textarea
кросс-браузерное решение, которое использует этот метод + запасной вариант в Firefox.document.execCommand
только после настройки . Я могу получить текст для записи в элементы, которые имеют . Однако, когда я пытаюсь выполнить это для текстовой области, вставленный текстовый узел помещается прямо перед текстовой областью в документе (а не в текстовой области). Пожалуйста, попытайтесь помочь Mozilla понять это здесь .document.designMode = "on";
.contentEditable = 'true'
execCommand
): «Эта функция устарела. Хотя он все еще может работать в некоторых браузерах, его использование не рекомендуется, поскольку его можно удалить в любое время. Старайтесь не использовать его.Я ни к чему не стремился, пытаясь использовать ответ @ kasdega в среде AngularJS. Ничто из того, что я пытался, казалось, не могло заставить Angular действовать на изменения. Так что в случае, если это пригодится прохожим, вот переписывание кода @ kasdega, стиль AngularJS, который работал для меня:
и:
источник
element.triggerHandler('change');
, иначе модель не будет обновлена (из-за этого,element.triggerHandler('change');
я думаю.Вы должны написать код JS, чтобы поймать нажатие клавиши TAB и вставить несколько пробелов. Нечто подобное тому, что делает JSFiddle.
Проверьте скрипку jquery :
HTML :
JavaScript :
источник
event.preventDefault();
e.keyCode || e.which
.Многострочный скрипт восстановления на основе решения @kasdega.
источник
start === end
.Это решение позволяет использовать вкладку во всем выделенном фрагменте, как в типичном редакторе кода, а также отключить выделение этого выделения. Тем не менее, я не понял, как реализовать Shift-Tab, когда нет выбора.
источник
if (selected.length > 0) {...}
скрипкой: jsfiddle.net/jwfkbjkrИсходя из всего, что люди должны были здесь сказать об ответах, это просто комбинация клавиш (не keyup) + protectDefault () + вставка символа табуляции в каретке. Что-то вроде:
В предыдущем ответе был рабочий jsfiddle, но он использовал alert () при нажатии клавиши. Если вы удалите это предупреждение, то оно не сработало. Я только что добавил функцию для вставки вкладки в текущей позиции курсора в текстовой области.
Вот для чего работает jsfiddle: http://jsfiddle.net/nsHGZ/
источник
Я вижу, эта тема не решена. Я закодировал это, и это работает очень хорошо. Он вставляет табуляцию по указателю курсора. Без использования jquery
источник
Удерживайте ALT и нажмите 0,9 на цифровой клавиатуре. Работает в гугл-хром
источник
Я сделал один, к которому вы можете получить доступ с любым элементом textarea, который вам нравится:
И элемент будет выглядеть так:
источник
Самый простой способ сделать это в современных браузерах с ванильным JavaScript - это:
Обратите внимание, что для простоты я использовал многие функции ES6 в этом фрагменте, вы, вероятно, захотите перенести его (с Babel или TypeScript) перед его развертыванием.
источник
Вышеуказанные ответы все стирают историю отмены. Для тех, кто ищет решение, которое этого не делает, я потратил последний час на разработку следующего кода для Chrome:
Короче говоря, вкладки вставляются в начале выбранных строк.
JSFiddle: http://jsfiddle.net/iausallc/5Lnabspr/11/
Суть: https://gist.github.com/iautomation/e53647be326cb7d7112d
Пример использования:
$('textarea').enableTabs('\t')
Минусы: работает только на Chrome как есть.
источник
На Github есть библиотека для поддержки вкладок в ваших текстовых сообщениях от wjbryant: Tab Override
Вот как это работает:
источник
В качестве опции к коду Касдеги выше, вместо добавления вкладки к текущему значению, вы можете вместо этого вставлять символы в текущей точке курсора. Это имеет преимущество:
так замени
с участием
источник
источник
Попробуйте эту простую функцию jQuery:
источник
Я должен был сделать функцию, чтобы сделать то же самое, это просто в использовании, просто скопируйте этот код в ваш скрипт и используйте:
enableTab( HTMLElement )
HTMLelement что-то вродеdocument.getElementById( id )
Код является:
источник
Каждый вход элемента textarea имеет событие onkeydown. В обработчике событий вы можете предотвратить реакцию клавиши Tab по умолчанию, используя event.preventDefault () всякий раз, когда event.keyCode равен 9.
Затем поместите знак табуляции в правильном положении:
HTML
источник
источник
Простой автономный скрипт:
источник
Если вам действительно нужны вкладки, скопируйте вкладку из слова или блокнота и вставьте ее в текстовое поле там, где вы хотите
1 2 3
12 22 33
К сожалению, я думаю, что они удаляют вкладки из этих комментариев :) Это будет отображаться как% 09 в вашем POST или GET
источник