Javascript 插入符号在文本区域中的行之间移动时触发事件

Javascript 插入符号在文本区域中的行之间移动时触发事件,javascript,events,textarea,Javascript,Events,Textarea,如果用户更改插入符号所在的行(例如,单击或使用上/下箭头),有没有办法让textarea触发事件?或者这在Javascript中是不可能的?我找到了查找/设置插入符号当前位置的方法,但这不是我需要的…听起来您需要为文本区域注册几个事件。在我的头顶上,有一个单击事件和一个具有多个键码值的按键事件。您需要使用纯javascript,还是有一些javascript库可以利用 您需要注册事件的帮助吗?或者,在某个事件中,您是否需要帮助查找插入符号位置?(见安迪的链接)还是我两个问题的答案都是“是” 编

如果用户更改插入符号所在的行(例如,单击或使用上/下箭头),有没有办法让textarea触发事件?或者这在Javascript中是不可能的?我找到了查找/设置插入符号当前位置的方法,但这不是我需要的…

听起来您需要为文本区域注册几个事件。在我的头顶上,有一个单击事件和一个具有多个键码值的按键事件。您需要使用纯javascript,还是有一些javascript库可以利用

您需要注册事件的帮助吗?或者,在某个事件中,您是否需要帮助查找插入符号位置?(见安迪的链接)还是我两个问题的答案都是“是”


编辑 好的,从你的评论来看,你对jquery没问题,fieldselection插件阻止你重新发明轮子

  • 识别任何键盘键、鼠标点击、复制粘贴?可以在文本字段中移动插入符号的事件
  • 在事件期间,使用fieldselection插件获取新的插入符号位置
  • 使用当前插入符号位置&&font size&&text框物理大小&&linebreak计数确定是否已切换到新行
  • 如果确实切换了行,则触发一个自定义jQuery事件来执行所需的工作
  • //jquery1.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.
      });
    });
    
    引用堆栈溢出


    可能与@AndyE重复\n与用户在文本区域中看到的一行有很大区别。例如,这条评论没有一行换行,但我已经在文本区的第三行:)@Esailija:OP不够具体,我们不能说,但值得标记一下,以防他正在寻找。这就是为什么评论说“可能重复…”的原因。很抱歉含糊不清。我是说“\n”。不,我不相信我的问题是“查找当前行的值”问题的重复:我需要一些能够触发事件并改变页面内容的东西,以响应用户移动到另一行。我为我的问题中的任何愚蠢道歉:我几乎是一个全新的wrt Javascript新手,虽然我在其他语言方面经验丰富。事实上,我问这个主要是为了在我花更多时间学习Javascript之前看看这是否可行。这里是jQuery fieldselection插件的一个示例,请参见上面我的评论。。。所以,这听起来应该是可行的,方法是跟踪点击和按键,然后比较上一行和当前行,看看是否有变化?一旦我看到了策略,我应该能够弄明白。是的,我对图书馆没有异议。我几乎肯定会在项目的其他方面使用jQuery(如果我选择作为一个webapp…@dinkorlitz)查看我对我认为需要做的事情所做的编辑。太棒了!谢谢我会把你的代码留着,等我开始做这个项目的时候。