2017-05-22 118 views
0

我试图将IE8浏览器中文本区域的行数限制为20,每行的字符数限制为15。我尝试了像https://stackoverflow.com/a/11586266/1453499这样的stackoverflow已经可用的解决方案,但是所有这些解决方案都适用于Chrome和其他现代浏览器,而不是IE8。有没有与IE8兼容的解决方案?文本区域中单行限制行数和字母数

+0

改变'textArea.keypress(功能(E)''到textarea的。 on('keypress change keyup',function(e)'does not help? –

+0

这没有帮助,问题是使用textArea.get(0).selectionStart语句 – coder

回答

0

我用了两个答案(https://stackoverflow.com/a/3373056/1453499 & https://stackoverflow.com/a/11586266/1453499)的组合,以找到解决我的问题,下面是最终的解决方案

function getInputSelection(el) { 
     var start = 0, normalizedValue, range, 
      textInputRange, len, endRange; 

     if (typeof el.selectionStart === "number" && typeof el.selectionEnd === "number") { 
      start = el.selectionStart; 
     } else { 
      range = document.selection.createRange(); 

      if (range && range.parentElement() === el) { 
       normalizedValue = el.value.replace(/\r\n/g, "\n"); 
       len = normalizedValue.length; 

       // Create a working TextRange that lives only in the input 
       textInputRange = el.createTextRange(); 
       textInputRange.moveToBookmark(range.getBookmark()); 

       // Check if the start and end of the selection are at the very end 
       // of the input, since moveStart/moveEnd doesn't return what we want 
       // in those cases 
       endRange = el.createTextRange(); 
       endRange.collapse(false); 

       if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { 
        start = len; 
       } else { 
        start = -textInputRange.moveStart("character", -len); 
        start += normalizedValue.slice(0, start).split("\n").length - 1; 
       } 
      } 
     } 

     return start; 
    } 

    $(document).ready(function() { 
     //Restrict the search 
     var textArea = $('#textarea_id'); 
     var maxRows = 30; 
     var maxChars = 17; 
     textArea.keypress(function(e) { 
      var text = textArea.val(); 
      var lines = text.split('\n'); 
      if (e.keyCode === 13) { 
       return lines.length < maxRows; 
      } else { //Should check for backspace/del/etc. 
       var caret = getInputSelection(textArea.get(0)); 
       var line = 0; 
       var charCount = 0; 
       $.each(lines, function(i, e) { 
        charCount += e.length; 
        if (caret <= charCount) { 
         line = i; 
         return false; 
        } 
        //\n count for 1 char; 
        charCount += 1; 
       }); 

       var theLine = lines[line]; 
       return theLine.length < maxChars; 
      } 
     }); 

    });