Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Символ табуляции в <input ..>
 
 автор: ddhvvn   (10.01.2007 в 17:08)   письмо автору
 
 

Как вставить символ табуляции в элемент <input ..> или <textarea></textarea>?
Ведь, если просто нажать, клавишу tab, курсор перейдет на след. эелемент.

   
 
 автор: 12345   (10.01.2007 в 18:04)   письмо автору
 
   для: ddhvvn   (10.01.2007 в 17:08)
 

Блокируйте стандартное действие при нажатии Tab при onkeypress (или onkeydown?), preventDefault/и что-то другое для IE

   
 
 автор: ddhvvn   (10.01.2007 в 18:18)   письмо автору
 
   для: 12345   (10.01.2007 в 18:04)
 

>...что-то другое для IE

...returnValue=false ?

   
 
 автор: Lelik   (10.01.2007 в 18:44)   письмо автору
 
   для: ddhvvn   (10.01.2007 в 18:18)
 

не, эта хрень вообще заблочит ввод в текстовое поле

   
 
 автор: ddhvvn   (10.01.2007 в 20:12)   письмо автору
 
   для: Lelik   (10.01.2007 в 18:44)
 

А как? Можно пример кода?

   
 
 автор: ddhvvn   (10.01.2007 в 20:37)   письмо автору
 
   для: ddhvvn   (10.01.2007 в 20:12)
 

Люди! Нужна помощь!!! Жду ее от Вас :))

   
 
 автор: 12345   (11.01.2007 в 01:32)   письмо автору
 
   для: ddhvvn   (10.01.2007 в 20:37)
 

Спасение подкралось незаметно.
<input value=12345 onkeydown=if(event.keyCode==9){this.value+=String.fromCharCode(9);return!1}>
Будет вставлять табуляцию в конец строки. Чтобы в место курсора - нужен довольно длинный скрипт с ветвлением по браузерам. Если уже есть скрипт вставки bb-кодов, нужно им воспользоваться.

   
 
 автор: ddhvvn   (11.01.2007 в 10:24)   письмо автору
 
   для: 12345   (11.01.2007 в 01:32)
 

Не работает :(((
Мне нужно для textarea, value изменил на innerText, все равно не работает :(

   
 
 автор: ddhvvn   (11.01.2007 в 12:09)   письмо автору
 
   для: ddhvvn   (11.01.2007 в 10:24)
 

Ну что? HELP ME :))))

   
 
 автор: SHAman   (11.01.2007 в 12:11)   письмо автору
 
   для: ddhvvn   (11.01.2007 в 12:09)
 

http://www.artlebedev.ru/tools/technogrette/js/allow_tab_key/

   
 
 автор: 12345   (11.01.2007 в 13:04)   письмо автору
 
   для: SHAman   (11.01.2007 в 12:11)
 

В смысле, в FF не работает? Тогда для него

<textarea value=12345 onkeydown=if(event.keyCode==9){this.value+=String.fromCharCode(9);return!1}
  onkeypress=if(event.keyCode==9)return!1>


А Опера славится своей неподкупностью (несогласием отменять стандартные действия), и здесь тоже. Поэтому для неё при blur надо возвращать фокус (у Токмакова тоже). Да ещё, как оказалось, пододвигать курсор (будет работать от 8-й версии).
Наконец, переписал, чтобы работало со вставкой внутри строки, воспользовавшись приведённой в коде Токмакова наводкой на методы (а то самому смотреть было лениво). Это selectionStart и document.selection.createRange.
<textarea value=12345 onkeydown="if((kc=event.keyCode)==9){setTimeout('kc=0',99);var t=this.value;if(this.selectionStart!=null)this.value=t.substr(0,this.ts=this.selectionStart)+'\t'+t.substr(this.selectionEnd,t.length);else{var selCur=document.selection.createRange();selCur.text='\t';};return!1}"
  onkeypress=if(event.keyCode==9){this.selectionEnd=this.selectionStart=this.ts+1;return!1}
  onblur=if(kc==9)this.focus()>123456</textarea>
<input value="12345-смотреть фокус Оперы">


У Токмакова (http://www.artlebedev.ru/tools/technogrette/js/allow_tab_key/) скрипт делает ещё одно недокументированное действие: если кликать по табу при выделенной области, в начале каждой строки добавляются табы, если кликать Shift-Tab - убираются. Для простоты и соовтетствия минимальным требованиям я этого не делал.

   
 
 автор: ddhvvn   (11.01.2007 в 14:11)   письмо автору
 
   для: 12345   (11.01.2007 в 13:04)
 

Ок. Спасибо. Разобрался

   
 
 автор: 12345   (11.01.2007 в 14:29)   письмо автору
 
   для: ddhvvn   (11.01.2007 в 14:11)
 

Да, ещё в этот код надо добавить восстановление scrollTop в textarea, чтобы прокрутка не прыгала в начало многострочного текста. Вот так:
<textarea value=12345 onkeydown="if((kc=event.keyCode)==9){setTimeout('kc=0',99);st=this.scrollTop;var t=this.value;if(this.selectionStart!=null)this.value=t.substr(0,this.ts=this.selectionStart)+'\t'+t.substr(this.selectionEnd,t.length);else{var selCur=document.selection.createRange();selCur.text='\t';};return!1}"
  onkeypress=if(event.keyCode==9){if(!document.all)this.scrollTop=st;this.selectionEnd=this.selectionStart=this.ts+1;return!1}
  onblur=if(kc==9)this.focus()>123456</textarea>
<input value="12345-смотреть фокус Оперы">

   
 
 автор: ddhvvn   (11.01.2007 в 14:39)   письмо автору
 
   для: 12345   (11.01.2007 в 14:29)
 

Да уж...

И это все, чтобы всего лишь вставить знак табуляции :))) Ладно попробую.
Но легче сделать над полем кнопку, и по ее нажатию вставлять знак табуляции :))

   
 
 автор: 12345   (11.01.2007 в 15:39)   письмо автору
 
   для: ddhvvn   (11.01.2007 в 14:39)
 

Если вставлять в позицию курсора по кнопке, то 2/3 кода придётся оставить :). И заодно несложно добавить вставку смайликов им же.

   
 
 автор: ddhvvn   (11.01.2007 в 16:38)   письмо автору
 
   для: 12345   (11.01.2007 в 15:39)
 

>Если вставлять в позицию курсора по кнопке, то 2/3 кода придётся оставить :)
Почему?

  <button onclick="document.all.txt.innerText += String.fromCharCode(9);">TAB</button>  //ну или input

 <textarea name=txt cols=50 rows=10>...</textarea>

И все!

   
 
 автор: 12345   (11.01.2007 в 17:06)   письмо автору
 
   для: ddhvvn   (11.01.2007 в 16:38)
 

(так не совсем правильно делать - лучше через value, чтобы везде работало)
Это вставка в конец текста. "В позицию курсора" означает, что в тот промежуток между символами, где стоит (мигает) курсор.

   
 
 автор: ddhvvn   (11.01.2007 в 18:10)   письмо автору
 
   для: 12345   (11.01.2007 в 17:06)
 

Это я знаю. Но мне-то надо в конец :)))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования