Ошибка IE Javascript: неожиданный вызов метода или доступа к свойству - PullRequest
21 голосов
/ 28 февраля 2010

У меня есть следующий код, и он работает (как обычно) во всем, кроме IE. Это дает мне неожиданный вызов доступа к методу или свойству в Jquery, и я не знаю, как его отладить. Я использовал панель инструментов разработчика IE, которая бесполезна для этой ошибки и просто дает мне строку № 12 (внутри скрипта jquery).

Любая помощь очень ценится:

<script type="text/javascript">
$(document).ready(function () {

    $.history.init(pageload);

    $('a[href=' + window.location.hash + ']').addClass('selected');

    $('a[rel=ajax]').click(function () {

        var hash = this.href;
        hash = hash.replace(/^.*#/, '');
        $.history.load(hash);

        $('a[rel=ajax]').removeClass('selected');
        $(this).addClass('selected');
        $('.loading').show();

        getPage();

        return false;
    });
});

function pageload(hash) {
    if (hash) getPage();
}

function getPage() {

    hash = document.location.hash;
    hash = hash.replace(/^.*#/, '');
    var data = 'page=' + encodeURIComponent(hash);
    $.ajax({
        url: "index.php",
        type: "POST",
        data: data,
        cache: false,
        success: function (html) {
            $('.loading').hide();
            $('tbody').html(html);

        }
    });
}
</script>

Вот плагин истории: http://plugins.jquery.com/project/history

А вот демо, за которым я следовал: http://plugins.jquery.com/project/history

Все еще изменяя window.location обратно на document.location, похоже, ничего не изменилось

Я заблудился на этом. Когда я меняю тег, к которому я обращаюсь, он публикует сообщения, поэтому он работает, но в IE дизайн не работает, и следующие ссылки, на которые я нажимаю, не публикуются. Действительно странно !! Прекрасно работает в Firefox, Opera и др.

Ответы [ 9 ]

8 голосов
/ 28 февраля 2010

Я немного удивлен, что IE жалуется на это, но это хорошо, что он делает: вы пропускаете объявление в getPage для hash (например, ставьте var перед первым использованием) .

В других случаях это, по-видимому, создает неявный глобал (свойство объекта window, называемое hash), что, конечно, является Плохим (тм), но, насколько я понимаю, исправить в соответствии со спецификацией (соответствующие разделы 8.7 [" Тип "] и 10.1.4 [" Цепочка области действия и разрешение идентификатора "]).

Тем не менее, все еще удивленный IE жалуется на это. Это должно быть связано с областью, в которой jQuery вызывает ваш обработчик кликов.

6 голосов
/ 26 октября 2011

Если вы получаете эту ошибку при использовании элементов HTML5 в IE, убедитесь, что вы используете html5shim, чтобы сообщить IE, что это реальные элементы.

4 голосов
/ 15 ноября 2010

Это будет:

$('tbody').html(html);

IE выдает ошибку, когда вы пытаетесь поместить определенные вещи в некоторые узлы. Например,

$('<input>').append('</p>')

Чтобы это исправить, добавьте html к другому элементу. Например, вы можете попробовать:

$('table').html('<tbody>' + html + '</tbody>');
0 голосов
/ 16 февраля 2014

Вы устанавливаете какие-либо поля ввода?

У меня была та же проблема, циклически перебирая массив значений, но я изменил текстовое поле на вход. Chrome просто игнорирует это, но IE 8 взрывается.

$("#someID").html("someValue") = бум! в IE 8, если someID является входом

Уже был вызов val, но нужно было удалить html.

$("#someID").val("someValue") = хорошо

0 голосов
/ 17 февраля 2013

У меня была такая же проблема прямо сейчас. Мне кажется, что это происходит для невидимых элементов. Убедитесь, что ваш элемент виден в момент вызова .html() для него.

0 голосов
/ 11 июля 2012

У меня была такая же проблема. Первоначально был список избранных, который добавлялся к нему. По пути выбор был изменен на поле ввода. Попытка добавить тег опции в поле ввода, кажется, делает IE несчастным.

0 голосов
/ 09 июля 2012

У меня была эта проблема в веб-приложении, которое использовало элементы HTML5. Когда я включил скрипт Modernizr в страницы, проблема была решена.

0 голосов
/ 28 февраля 2010

Я думаю, что мистер Краудер что-то задумал. Насколько я могу судить из источника jQuery, если ваш возвращенный фрагмент HTML не содержит тегов <script> и не имеет пары других не слишком вероятных характеристик, то, вероятно, jQuery пытается его заполнить. в ваш <tbody> элемент, используя свойство "innerHTML". IE это не нравится.

Что вам, возможно, придется сделать, это обернуть все <table> в пустышку <div>, а затем перестроить все это из фрагмента HTML.

0 голосов
/ 28 февраля 2010

Я не могу найти метод истории в jQuery API , поэтому я предполагаю, что это либо:

  • Сторонний плагин.
  • Косвенный вызов старого window.history объекта.
  • Пользовательский объект, который вы создали.

Я предполагаю, что IE (хорошо известный тем, что загрязняет глобальную область, делая все глобальным), думает, что любая ссылка на history на самом деле означает window.history , и это становится запутанным. Если это пользовательский объект, попробуйте переименовать его в myHistory или что-нибудь еще.

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