Автоотступ «умной» текстовой области

Я пытаюсь создать текстовое поле с автоматическим отступом, и пока оно работает со следующим кодом. Проблема, с которой я столкнулся, заключается в том, что в настоящее время я предотвращаю действие по умолчанию: нажатие клавиши ввода для вычисления вкладок в строке, а затем вставка новой строки после этого.

Это работает, но я хочу иметь значение по умолчанию действие текстового поля, в том смысле, что если вы удерживаете нажатой клавишу Enter, он не прокручивает текстовое поле до тех пор, пока каретка не коснется нижней строки, а затем полоса прокрутки останется с кареткой в ​​нижней строке. Текущий код ниже сохраняет курсор в поле зрения, если он используется где-нибудь в текстовой области, но он заставляет содержимое над курсором прокручиваться вверх, что является компромиссом, поскольку каретка больше не исчезает. Если другого решения нет, все будет нормально, В качестве обновления, чтобы устранить любую путаницу, я пытаюсь создать текстовое поле в стиле IDE, поэтому, например, в большинстве IDE, если вы наберете следующее

function example(whatever) {
     Example Stuff // And then hit enter here

, я хочу, чтобы он перенес вас на такое же расстояние табуляции от левой границы как «Примеры материалов», чтобы ваш код было легче читать. В настоящее время у меня есть эта функция, но проблема в том, что я перехватываю клавишу ввода, что означает, что я должен затем предоставить эту функцию. Мне сложно воспроизвести точную функциональность, не прокручивая текстовое поле, пока курсор не достигнет нижней границы. Итак, если бы вы удерживали ввод в верхней части текстового поля, курсор просто прокручивает текстовое поле вниз, перемещая с ним любой текст, пока он не достигнет нижней границы, а затем полоса прокрутки для текстовой области будет следовать за курсором. Имеет смысл?

РЕДАКТИРОВАТЬ 2 Обновлены теги, указывающие на то, что код написан на PHP

Я работал над этим, пока находился этот пост. Я думаю, что другой вариант, который я собираюсь изучить, когда у меня будет возможность, - это не предотвращать ввод, а просто разрешить действие по умолчанию - нажать ввод и прочитать строку из lastIndexOf ('\ n') - 1 до самый последний \ n для любого \ t . Я думаю, что это дало бы мне строку, которую я ищу, но без нарушения поведения текстового поля. Обновится снова после тестирования.

РЕДАКТИРОВАТЬ 3 Решено, согласно моему предыдущему обновлению я решил сканировать строку после нажатия клавиши, сохраняя естественное поведение (раздел изменен, добавлен ниже для тех, кто заинтересован), и единственная проблема что действительно остается, так это то, что если вы удерживаете ввод, он выиграл ' t посчитать отступ от источника ввода, что меня устраивает. Я собираюсь передать это http://stackoverflow.com/users/15066/matyr'>matyr, хотя я понял, прежде чем он ответил, он все еще был ближе всех.

if (this.value.lastIndexOf('\n',start-2)==-1) {
 var startSubstr = 0;
} else {
 var startSubstr = this.value.lastIndexOf('\n',start-1)+1;
}    
var valueToScan = this.value.substr(startSubstr,start);
5
задан Robert 14 August 2010 в 05:45
поделиться