Ошибка jQuery .find (): «Неожиданный вызов метода или доступа к свойству» - PullRequest
5 голосов
/ 24 октября 2011

У меня проблемы с получением одной из страниц моего сайта с помощью IE8. Он отлично работает в IE9, Safari (для ПК и Mac) и Firefox (для Mac). Я использую последовательность вызовов find(tag1).html(tag1) для подстановки заголовка, но я получаю следующую ошибку в IE8, когда отлаживаю ее в отладчике сценариев IE, и это в функции html(tag2):

Неожиданный вызов доступа к методу или свойству

Кажется, что функция find(tag1) возвращает вложенный объект (т.е. #sidebar), а не вложенный объект #sidebarheader, и это вызывает проблемы при последующем вызове html(tag2).

Я создал типичный тестовый пример следующим образом:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>JQuery .find() test case</title> 

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"></script>
    <script  type="text/javascript">
        function UpdateHeader() { 
           $('#sidebar').find('header').html("New Title"); // IE8, nesting div's in the find fct. will not discover the child div
        }

        document.ready = UpdateHeader;
    </script>
</head>

<body>
      <div style="height: 400px; width: 390px">

          <div id="jqm-home">
            <div id="page">
                <div id="sidebar">
                    <div id="sidebarheader">
                        <header>Old Title</header>
                    </div>
                </div>
            </div>
          <p onclick="UpdateHeader();">Click to update title</p>   
          </div>
      </div>     
</body>            
</html>

А вот тестовый пример jsFiddle:

http://jsfiddle.net/bnmcK/21/

Кто-нибудь предлагал, как заставить это работать в IE8?

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Для поддержки новых элементов HTML 5 в более старых версиях IE (8 и ниже) есть удобный трюк, который включает создание фиктивного элемента перед запуском скрипта.

Итак, просто вызов document.createElement('header'); на вашей странице решит проблему, см. здесь .

Для полного объяснения, этот пост делает хорошую работу по предоставлению объяснения.

Кроме того, html5shiv - это проект, который решает эту проблему и для других элементов.

1 голос
/ 25 октября 2011

- это тег HTML5, о котором IE8 не знает (однако IE9 поддерживает этот тег).Поскольку вы объявляете XHTML 1.0 переходной, я бы предложил вместо этого использовать тег

, который будет отлично работать в IE8.

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