Похоже, вам нужно зарегистрировать пару событий для вашей текстовой области.от макушки головы, событие щелчка и событие нажатия клавиши с несколькими значениями кода клавиши.Вам нужно использовать чистый javascript или у вас есть какие-нибудь библиотеки javascript для использования?
Вам нужна помощь в регистрации событий?или вам нужна помощь в поиске позиции каретки во время одного из событий?(см. ссылку Энди) или ответ на оба моих вопроса "да"?
edit
хорошо, из ваших комментариев вы согласны с jquery, иплагин fieldselection не позволяет вам заново изобретать колесо.
- идентифицирует любые клавиши клавиатуры, щелчки мышью, «копировать пасту»?события, которые могут переместить каретку в текстовое поле. Навигация и выделение фрагментов текста, википедия
- во время мероприятия, используйте плагин fieldselection, чтобы получить новую позицию каретки.
- используйте текущую позицию каретки && размер шрифта &&физический размер текстового поля && число строк, чтобы определить, переключились ли вы на новую строку.
- если вы переключали строки, запустите пользовательское событие jQuery, чтобы выполнить желаемую работу.
// jQuery 1.7
$(document).ready(function(){
var currentLine = -1;
$("#textAreaID").on("keypress", function(evt){
if(evt.which === 40 || ...){
//down arrow key, enter key, page down key, all will move the caret to a newline
$(this).trigger("newline");
}else{
//a ton of text in a fixed width textarea will move the cursor to a newline
$(this).trigger("checkForNewline");
}
}).on("click checkForNewline", function(evt){
var jqElem = $(this);
//fieldSelection plugin call
var range = jqElem.getSelection();
if(range["row"] && range["row"] !== currentLine){
currentLine = range["row"];
jqElem.trigger("newline");
}else{
var handTypedNewlines = jqElem.val().split(/\r\n|\r|\n/);
var userTypedRowcounts = Math.floor(wholeString.length / jqElem.cols) + (handTypedNewlines instanceof 'object')?handTypedNewlines.length:0;
if(userTypedRowcounts != currentLine){
currentLine = userTypedRowcounts;
jqElem.trigger("newline");
}
}
}).on("newline", function(evt){
// do your work, caret is on a newline.
});
});
ссылка переполнения стека.
ссылка для получения .split () регулярное выражение