Событие стрельбы, когда каретка перемещается между строками в текстовом поле

Есть ли способ, чтобы textarea запускал событие, если пользователь меняет, на какой строке находится карет, нажав или используя стрелки вверх/вниз? Или это просто невозможно в Javascript? Я нашел способы найти/установить текущую позицию каретки, но это не то, что мне нужно...

Ответ 1

Похоже, вам нужно зарегистрировать пару событий для вашей текстовой области. от верхней части головы, события клика и события нажатия клавиши с несколькими значениями кода ключа. Вам нужно использовать чистый javascript, или у вас есть библиотеки javascript для использования?

Вам нужна помощь в регистрации событий? или вам нужна помощь в поиске позиции каретки во время одного из событий? (см. ссылку на ссылку для этого) или ответ на оба вопроса "да"?


Изменить

ok, из ваших комментариев вы в порядке с jquery, и плагин fieldselection не позволяет вам изобретать колесо.

  • идентифицировать любые клавиши клавиатуры, щелчки мышью,? скопировать пасту? события, которые могут перемещать каретку в текстовое поле. Перемещение и выбор частей текста, википедии
  • во время события используйте плагин fieldselection, чтобы получить новую позицию каретки.
  • использовать текущую позицию каретки && & размер шрифта && & & физический размер текстового окна && & linebreak count, чтобы определить, переключились ли вы на новую строку.
  • Если вы переключали строки, запускайте пользовательское событие 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() regex