Подтвердить что ты не робот

Ошибка Javascript IE: неожиданный вызов метода или доступа к свойствам

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

Любая помощь приветствуется:

<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, похоже, не имеет значения

Я потерял на этом. Когда я меняю тег im, вызывающий его, он публикует так, чтобы он работал, но в том, что дизайн все сломан, а следующие ссылки я нажимаю на dont post. Действительно странно!!, отлично работает в FF, опера и т.д.

4b9b3361

Ответ 1

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

На других он предположительно создает неявный глобальный (свойство объекта window, называемое hash), что, конечно, Bad Thing (tm), но, как я понимаю, он правильный в соответствии со спецификацией (соответствующие разделы составляют 8,7 ["Ссылка Type "] и 10.1.4 [" Scope Chain and Identifier Resolution "]).

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

Ответ 2

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

Ответ 3

Это будет:

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

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

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

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

$('table').html('<tbody>' + html + '</tbody>');

Ответ 4

Я не могу найти метод истории в jQuery API, поэтому могу предположить:

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

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

$("#someID").val("someValue")= good