SCRIPT438: объект не поддерживает свойство или метод «совпадения»

#javascript #html #jquery #internet-explorer

#javascript #HTML #jquery #internet-explorer

Вопрос:

Мой код работает в Chrome, Firefox, Safari и Microsoft Edge, но в Internet Explorer я вижу эту ошибку в консоли:

SCRIPT438: объект не поддерживает свойство или метод «совпадения»

Может кто-нибудь помочь?

 document.addEventListener('click', function (e) {
  var matches = e.target.matches('.open_section_btn');
  if (matches) {
    getApp(e);
  }
}, false);
 

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

1. Какую версию IE вы используете? matches() поддерживается вплоть до IE9: developer.mozilla.org/en-US/docs/Web/API/Element/matches . Если вы действительно все еще используете IE8 или ниже, используйте полизаполнение, доступное по этой ссылке. Тогда я настоятельно рекомендую вам сменить браузер.

2. @RoryMcCrossan — IE9 имеет только его имя с префиксом, msMatchesSelector .

3. Хороший момент — я пропустил значок предостережения. Я бы все же предложил использовать полизаполнение вместо нестандартного имени свойства

Ответ №1:

IE не поддерживает matches , но поддерживает msMatchesSelector . Страница MDN для matches перечисляет полизаполнение для использования версий с префиксами, если версии без префиксов недоступны:

 if (!Element.prototype.matches) {
  Element.prototype.matches = Element.prototype.msMatchesSelector ||
                              Element.prototype.webkitMatchesSelector;
}
 

(Если вас беспокоит, что это просто использование присваивания, а не Object.defineProperty для создания неисчислимого свойства [как у меня было], получается Element.prototype.matches , что оно перечислимо, так что все в порядке.)

Есть более длинный, но если вам просто нужно поддерживать IE9 и что-нибудь смутно современное, этого достаточно.

Ответ №2:

Если вы используете IE версии 9 или выше, вы можете заставить его работать, используя ms префикс. Проверьте полный список поддержки здесь