jQuery «это» наследие - PullRequest
       4

jQuery «это» наследие

1 голос
/ 03 октября 2011

Я пытаюсь портировать слайд-шоу, которое я написал в jQuery 1.6, для работы в Drupal, который, как вы можете знать, а может и не знать, в данный момент «заблокирован» для jQuery 1.3 (я знаю, это задерживается).

У меня проблема с областью видимости, поскольку модель $(this) в jQuery 1.3 не такая надежная или полезная, как в более современных выпусках.

Вот код, который ломается:

var $controls   = $('a.controls', $frame);

$controls.click( function() {

  var $clicked = $(this);

  // ...

}

Выражение a.controls приводит к коллекции двух объектов в пределах $controls, как и ожидалось. Но когда jQuery 1.3 получает назначение $(this), он выдает следующую ошибку:

this [0] .ownerDocument имеет значение null

Кто-нибудь знает, почему это происходит, и как я могу это исправить или обойти?

Ответы [ 3 ]

0 голосов
/ 03 октября 2011

Это может не ответить на вопрос, но может помочь вам в решении проблемы.

С модулем drupal Обновление jquery вы можете выбрать версию jquery в drupal.

0 голосов
/ 04 октября 2011

Единственный способ, которым я думаю, что это будет сделано, - это небольшой взлом модуля jquery_update. Вам нужно заменить файл jquery.min.js (или jquery.js, если вы не используете свернутую версию) в sites / all / modules / jquery_update / заменить последней версией jQuery, а затем внести изменения в jquery.module файл (около строки 59):

function jquery_update_preprocess_page(&$variables) {
  // Only do this for pages that have JavaScript on them.
  if (!empty($variables['scripts'])) {

    // ADD THESE TWO LINES BEFORE THE REST OF THE CODE
    if (preg_match('/^\/admin[\/]*.*/', $_SERVER['REQUEST_URI'])) { return; }
    if (preg_match('/^\/batch[\/]*.*/', $_SERVER['REQUEST_URI'])) { return; }

Это, в основном, скажет jquery_update заменять javascript только на страницах без прав администратора и не на пакетных страницах, что должно служить вашей цели. Могут быть и другие пути, которые вам нужно добавить к этой проверке, в зависимости от ваших потребностей.

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

Надеюсь, вы разберетесь, это очень раздражающая проблема: -)

0 голосов
/ 03 октября 2011

Вероятно, это не то место, где происходит ошибка, контекст this работает для обратных вызовов событий в версии 1.3, как и в последней версии.

Пример: http://jsfiddle.net/hPfZH/2/

  • Вы уверены, что контекст $frame правильный?
  • Вы используете встроенный события клика на $controls, которые могут добавить конфликт?
...