IE jquery не допускает аргументы для show () в iframe - PullRequest
1 голос
/ 28 июля 2011

У меня есть код JS, например, так:

var li = $("li[attribute=foo]");
if (li.length)
{
  li.show("slow"); // Fails
}

Я вижу:

Error: Object doesn't support this property or method

show() без аргументов работает.

То же самое для fadeIn()или scrollUp().Я также заметил, что closest() не работает на другом элементе.Все это работает в Firefox.

Я подозреваю, что это потому, что рассматриваемый контент находится внутри iframe (сам jquery включен во внешнюю страницу), но все остальные jquery в iframe работают, и изс точки зрения отладчика IE, li существует и имеет метод show, доступный с аргументами.

Любые идеи о том, что идет не так, или как обойти это, будут высоко оценены.

1 Ответ

1 голос
/ 29 июля 2011

Согласно комментариям выше, это не имело никакого отношения к версии jquery или iframe, но было из-за некоторого JS на моей странице в форме:

Object.prototype.someCustomFunction = function( aObjects ) { ...}

Стоит поделиться, как я решил это, если это кому-нибудь поможет. Секрет заключался в том, чтобы получить полную версию jquery, а не запутанную и сжатую, чтобы я мог легче отлаживать то, что происходило в jquery.

Я обнаружил, что в Sizzle.filter jquery повторяется так:

for ( var type in Expr.filter ) { 
    if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
        ...
    }
}

Дело в том, что jquery ожидает найти ATTR, CHILD, CLASS и т. Д. Как type. Но он также находит someCustomFunction. И у someCustomFunction нет exec, поэтому он падает.

В настоящее время исправление взлома состоит в том, чтобы просто ввести пустой метод exec для поиска jquery. например

Object.prototype.someCustomFunction.exec = function( expr ) {}

В долгосрочной перспективе я захочу ограничить someCustomFunction тем местом, где оно действительно требуется, а не просто Object.

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