Селектор jQuery не работает в IE7 / 8 - PullRequest
0 голосов
/ 30 июня 2011

Кто-нибудь знает, почему это не будет работать в IE7 / 8?

drop_area = $('div#drop_area');

Он отлично работает в IE9, FF2 / 3 и Chrome.Internet Explorer 7/8 выдает следующую ошибку:

SCRIPT438: Object doesn't support this property or method 

Редактировать: это HTML, который идет с моим JavaScript: http://pastebin.com/nwxx8RzW

Ответы [ 4 ]

2 голосов
/ 30 июня 2011

IE имеет странное поведение для регистрации некоторых свойств в глобальной области видимости.Доступ к элементам с данным идентификатором можно получить просто с помощью идентификатора.

Таким образом, у вас есть элемент с идентификатором drop_area, он доступен в IE с использованием этого идентификатора, попробуйте:

alert(drop_area.tagName)

.. чтобы проверить это. (Должен дать "DIV")

Так что происходит: вы пытаетесь назначить что-то еще этому элементу при использовании drop_area = $('div#drop_area');, но это недопустимая операция для элемента DOMElement.

Поэтому используйте ключевое слово var, чтобы уточнить, что вы хотите создать переменную

var drop_area = $('div#drop_area');

, или в случае, если вам нужно создать глобальную переменную внутри функции, присвойте эту переменнуюглобальный контекст:

window['drop_area'] = $('div#drop_area');
1 голос
/ 30 июня 2011

Код, показанный на pastebin , имеет множество проблем с глобальными переменными. Другими словами, вы кодируете, предполагая, что переменные, которые вы объявляете, являются локальными по объему, тогда как в действительности они оказываются глобальными. Примеры включают set, box_handle, elements, i, id, drop_area, element, row, image_id и т. Д. Все ваши функции также являются глобальными по объему , когда они могут быть легко заключены в другую функцию.

Теперь я не знаю, происходят ли какие-то тонкие взаимодействия, есть ли в каком-то коде набор данных (глобальных), задаваемый другим кодом, но, безусловно, кажется, что что-то перезаписывается, и, следовательно, методы и свойства исчезают. Я бы начал с просмотра кода и добавления var к локальным переменным. Затем я бы инкапсулировал большую часть этого кода в анонимную функцию автоматического выполнения.

1 голос
/ 30 июня 2011

У вас есть элемент с идентификатором drop_area?то есть 6/7/8 автоматически назначает глобальную переменную элементу dom, используя идентификатор элемента.Еще немного кода будет полезно.

1 голос
/ 30 июня 2011

Обычно эта ошибка показывает, что вы используете jQuery на веб-сайте, который также использует Prototype.Вот почему получается ошибка (которая на самом деле выдается Prototype).Другая возможность заключается в том, что вы пытаетесь вызвать код до того, как библиотека jQuery была включена в HTML.

Чтобы убедиться, что это не мое первое предположение, добавьте этот код в код JS:

$.noConflict();

Поэтому важно, чтобы Prototype был включен в HTML, прежде чем jQuery будет включен: http://api.jquery.com/jQuery.noConflict/

Если вы заменяете все вхождения $ () на jQuery () и он работает,была первая проблема с использованием jQuery и Prototype одновременно.

...