2017-05-22 114 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; 
      } 
     }); 

    });