Ошибка IE, объект не поддерживает это свойство или метод

#javascript #jquery #internet-explorer

#javascript #jquery #internet-explorer

Вопрос:

  function charCount(){
  $.doTimeout('poll', 150, function(){
      messageVal = $('#messageLabel textarea').val();

      messageLength = messageVal.length; //IE BREAKS HERE

      $('#messageLength').html(messageLength   '/140')
      if(messageLength > 140){
          $('#messageLength').not('.inv').addClass('inv')
      }else{
          $('#messageLength.inv').removeClass('inv')
      }
      return false;
  })

}
$('#messageLabel textarea').change(charCount).keyup(charCount);
  

Выдает следующую ошибку в Internet Explorer 7.0 (и, возможно, в других версиях тоже).

Объект не поддерживает это свойство или метод.

Есть идеи о том, что вызывает эту ошибку?

Комментарии:

1. «Нет, не решение. Спасибо» — Попробуйте закомментировать материал, пока ошибка не исчезнет, и это изолирует оператор, который вызывает это.

2. @meder Ты абсолютно прав. Я уже отредактировал вопрос, хотя. Проблема в строке 5 (.length).

Ответ №1:

Когда вы не используете var ключевое слово, браузер IE выполняет поиск messageLength в глобальном контексте и находит его… у вас есть элемент с этим идентификатором.

Попытка присвоить номер элементу HTML завершается неудачей.

Чтобы решить эту проблему, просто объявите messageLength как локальную переменную:

 var messageLength = messageVal.length; //IE WON'T BREAK HERE
  

Ответ №2:

Попробуйте заменить :

 messageVal = $('#messageLabel textarea').val();
  

с

 messageVal = $('#messageLabel textarea').text();
  

Надеюсь, это поможет.

Комментарии:

1. Нет, не решение. Спасибо.

2. попробуйте выполнить typeof(messageVal)

3. странно, что это должно работать, вы уверены, что ошибка исходит из messageVal.length?

Ответ №3:

Я думаю, что у .change () возникла какая-то проблема в IE.Пожалуйста, удалите его и посмотрите, работает ли он.

Также попробуйте использовать .html () вместо .val().

Комментарии:

1. Нет, не решение. Спасибо.

Ответ №4:

посмотрите здесь простой тест. textarea не поддерживает свойство value. вы можете получить его через свойство text

Ответ №5:

Однако у меня была похожая ошибка, вызванная тем, что я добавил библиотеку jQuery на главную страницу, и в другом месте на той же странице было дублированное объявление библиотеки.