jQuery'这个'遗产范围

时间:2011-10-03 14:10:05

标签: jquery drupal scope this legacy

我正在尝试将我在jQuery 1.6中编写的幻灯片后端移植到Drupal中,你可能知道或者可能不知道它现在被“锁定”到jQuery 1.3(我知道,它是迟钝的)。

我遇到了范围问题,因为jQuery 1.3的$(this)模型不像现代版本那样强大或有用。

以下是破解的代码:

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

$controls.click( function() {

  var $clicked = $(this);

  // ...

}

a.controls表达式会按预期在$controls内生成两个对象的集合。但是当jQuery 1.3鼓励$(this)赋值时,它会抛出以下错误:

  

this [0] .ownerDocument为null

有谁知道为什么会这样做,以及我如何解决或解决它?

3 个答案:

答案 0 :(得分:0)

这可能不是错误发生的地方,this上下文在1.3中的事件回调与最新版本中的相同。

示例:http://jsfiddle.net/hPfZH/2/

  • 您确定$frame上下文是否正确?
  • 您使用的是内联吗? 点击可能会增加冲突的$controls上的活动?

答案 1 :(得分:0)

我认为这样做的唯一方法是使用jquery_update模块进行小规模的操作。您需要将sites / all / modules / jquery_update / replace中的jquery.min.js(或jquery.js,如果您没有使用最小化版本)文件替换为最新的jQuery版本,然后对{{进行更改1}}文件(第59行):

jquery.module

这基本上会告诉jquery_update只替换非管理页面和非批处理页面上的javascript,这应该可以满足您的需要。根据您的需要,您可能需要在该检查中添加其他路径。

我没有测试过这个,但理论上它会起作用,遗憾的是我无法评论AHAH(Drupal在AJAX框架上的跛脚尝试)是否能在非管理页面上使用更高版本的jQuery。 / p>

希望你对此进行排序这是一个非常烦人的问题: - )

答案 2 :(得分:-1)

这可能无法回答问题,但可能会帮助您解决问题。

使用drupal模块jquery update,您可以在drupal中选择jquery版本。