2009-02-15 3 views
4

Как я могу создать текстовое поле, которое позволяет пользователям вводить вкладки и не посылает пользователя к следующему элементу при нажатии кнопки табуляции?Вкладка в текстовых полях

ответ

7

Вам нужно всего лишь проверить наличие вкладок onkeydown через event.keyCode === 9. Вставка символа в текстовое поле нетривиальна - используйте библиотеку или google для «insertatcaret».

2

Вы можете использовать JavaScript, чтобы поймать событие нажатия клавиши tab и заменить его пробелами (я не уверен, что вставляю вкладки в текстовое поле).

E:This pageвыглядит хорошо.

+0

Meta-Filter работает снова, поэтому я отредактировал ваш ответ. – UnkwnTech

1

onkeypress, onkeyup или onkeydown проверьте нажатой клавишу и, если она является вкладкой, добавьте \ t в текстовое поле и верните false, чтобы фокус остался в текстовом поле , вам, скорее всего, придется использовать текстовые диапазоны, чтобы вкладки может быть вставлен в любом месте, а не в конце текста . Это основная идея для остальных. Google является вашим другом :)

5

Есть уже некоторые плагины для jQuery, которые делают это. Например, один из них - Tabby.

+0

Кто сказал что-нибудь о jQuery? – UnkwnTech

+1

Я что-то сказал о jQuery. Потому что: Почему не jQuery? Конечно, это немного преувеличено. Но, возможно, он хочет использовать его и для других вещей. И когда он использует Google API , он может быть уже в кеше. – Gumbo

+1

@Unkwntech - нет необходимости изобретать велосипед. Указание существующего решения проблемы совершенно законно. Если вы сказали: «Я использую MooTools (или Prototype)», а затем указать, что решение jQuery может оказаться неприемлемым. – tvanfosson

2
 
<textarea onkeydown="return catchTab(this, event);"> 

JS код:

 

function setSelectionRange(input, selectionStart, selectionEnd) { 
    if (input.setSelectionRange) { 
     input.focus(); 
     input.setSelectionRange(selectionStart, selectionEnd); 
    } 
    else if (input.createTextRange) { 
     var range = input.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', selectionEnd); 
     range.moveStart('character', selectionStart); 
     range.select(); 
    } 
} 

function replaceSelection (input, replaceString) { 
    if (input.setSelectionRange) { 
     var selectionStart = input.selectionStart; 
     var selectionEnd = input.selectionEnd; 
     input.value = input.value.substring(0, selectionStart)+ replaceString + input.value.substring(selectionEnd); 
     if (selectionStart != selectionEnd){ 
      setSelectionRange(input, selectionStart, selectionStart + replaceString.length); 
     } else{ 
      setSelectionRange(input, selectionStart + replaceString.length, selectionStart + replaceString.length); 
     } 
    } else if (document.selection) { 
     var range = document.selection.createRange(); 
     if (range.parentElement() == input) { 
      var isCollapsed = range.text == ''; 
      range.text = replaceString; 
      if (!isCollapsed) { 
       range.moveStart('character', -replaceString.length); 
       range.select(); 
      } 
     } 
    } 
} 

function catchTab(item,e){ 
    if(navigator.userAgent.match("Gecko")){ 
     c=e.which; 
    } else{ 
     c=e.keyCode; 
    } 
    if(c==9){ 
     replaceSelection(item, "\t"); 
     setTimeout(function() { item.focus() } , 0); 
     return false; 
    } 
} 
 
0

ли НЕ попытку захватить OnKeyPress событие для ключа 'TAB' в IE (не работает) (bug 249)

Попробуйте onkeydown или onkeyup ins TEAD.

Смежные вопросы