Событие запуска, когда каретка перемещается между строками в текстовой области. - PullRequest
10 голосов
/ 17 ноября 2011

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

1 Ответ

3 голосов
/ 17 ноября 2011

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

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


edit

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

  1. идентифицирует любые клавиши клавиатуры, щелчки мышью, «копировать пасту»?события, которые могут переместить каретку в текстовое поле. Навигация и выделение фрагментов текста, википедия
  2. во время мероприятия, используйте плагин fieldselection, чтобы получить новую позицию каретки.
  3. используйте текущую позицию каретки && размер шрифта &&физический размер текстового поля && число строк, чтобы определить, переключились ли вы на новую строку.
  4. если вы переключали строки, запустите пользовательское событие 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 () регулярное выражение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...