Проверьте, если окно, и если так, измените на документ в плагине jQuery - PullRequest
1 голос
/ 18 июня 2011

У меня есть плагин, jKey, и люди продолжают сообщать об ошибках IE, что он не работает.Ошибка не в моем скрипте или jQuery, а в IE не поддерживает нажатия клавиш окна.Я хочу «автоматически исправить», проверив, был ли выбран $(window) (что я сделал ниже, проверив, если «this» имеет parentNode), и если это было, я хочу переключить this наdocument.

Мне не повезло, правда.Я продолжаю получать:

Uncaught ReferenceError: Invalid left-hand side in assignment

Я пробовал:

if($(this)[0].parentNode == undefined){
    $(this) = $(document);
}

И:

if($(this)[0].parentNode == undefined){
    this = document;
}

Есть идеи?Кроме того, если у вас есть лучший способ проверить window, пожалуйста, дайте мне знать!

1 Ответ

2 голосов
/ 18 июня 2011
  • $ - это функция.$(this) - это вызов функции.Вы не можете назначить значение для вызова функции.
  • this никогда непосредственно назначается.
  • Вы действительно jQuery-ifying this и затем сразураспаковка?

    $(this)[0].parentNode
    // is exactly equivalent to
    this.parentNode
    

Кроме того, если у вас есть лучший способ проверки окна, пожалуйста, дайте мне знать!

ВПлагин, псевдоним this для ключевого слова, которое вы можете назначить.Частый выбор: self:

// plugin entry point
var self = this;

// use self instead of this throughout the rest of the plugin

Теперь вы на самом деле можете изменить «область действия»:

if (!this.parentNode) {
    self = document;
}

ваш фрагмент, кажется, преобразует все выборки вдокумент?не просто окно?поэтому $('input') преобразуется в документ

О, верно, вы говорите о плагине jQuery.this, вероятно, уже является объектом jQuery, в этом случае this.parentNode всегда будет ложным значением.Вы можете распаковать его:

if (!this[0].parentNode) {
    self = $(document);
}

или использовать

if (this.first().parent().length) {
    self = $(document);
}
...