IE8 показывает ошибку: «Объект не поддерживает это свойство или метод» в строке, которая использует метод filter () - PullRequest
3 голосов
/ 01 февраля 2012

Я использую этот скрипт, чтобы ограничить количество символов в строках 1-3 на моем текстовом поле. Работает в Firefox и Chrome. Но в IE8 выдает ошибку: «Объект не поддерживает это свойство или метод» в строке, которая использует метод filter ().

Вот код:

var result = jQuery('#result');
var my_textarea = jQuery('#mytext');
my_textarea.on('keyup', function(event){
    var el = jQuery(this);
    var lines = el.val().split('\n').length;
    var chars = el.val().split('').filter(function(v){
        return v != '\n';
    }).length;    
    result.html('You have ' + lines + ' lines and ' + chars + ' chars');    

    if ((lines === 1 && chars > 20) || (lines === 2 && chars > 40) || (lines === 3 && chars > 60)) {
          my_textarea.val( my_textarea.val() + "\n");
    }
});

Как мне решить эту проблему?

Ответы [ 3 ]

10 голосов
/ 01 февраля 2012

IE8 не поддерживает метод Array.filter.
MDN имеет замену.

5 голосов
/ 01 февраля 2012

filter (и некоторые другие методы в Array) являются относительно новыми и не реализованы в старых браузерах - не только в IE8, но и в старом Firefox.

Вас может заинтересовать array_filter из PHPJS , поскольку это дает тот же эффект.

Опять же, глядя на ваш код, не будет ли это проще?

var chars = el.val().replace(/\n/g,'').length;
0 голосов
/ 03 июня 2013

Array.filter js polyfill:

[].filter||(Array.prototype.filter=function(g,f,j,i,h){
  j=this;i=[];
  for(h in j){~~h+""==h&&h>=0&&g.call(f,j[h],+h,j)&&i.push(j[h])}
  return i
});

Якоб Э

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