我发现了问题,这与 jQuery 的冲突版本有关。
基本上,drupal 加载 1.4.4,但我想使用 1.8.3,所以我这样做:
var drupalsJQuery = jQuery;
// Load jq.1.8.3.js
// Load jq.ui.1.9.2.js
// MY CODE GOES HERE
$ = jQuery = drupalsJQuery; // Restore $ and jQuery to their original value (the jQuery object of Drupal's version of jQuery (1.4.4))
在 MY CODE GOES HERE 部分,如果我写console.log($().jquery);
,它会打印出1.8.3
,这就是我想要的,所以我认为我的版本冲突已经结束。我没有注意到的是它并不总是有效。举这个例子(仍然在我的代码放在这里部分):
console.log($().jquery);
// Prints 1.8.3
$(document).ready(function () {
console.log($().jquery);
// Prints 1.4.4 !!!!
});
如您所见,版本在$(document).ready(function () { /*HERE*/ });
解决方案是将 jQuery 对象作为参数传递给匿名函数:
console.log($().jquery);
// Prints 1.8.3
$(document).ready(function ($) {
console.log($().jquery);
// Prints 1.8.3 !!!!
});
现在版本保持正确。
我无法正确解释这种行为,所以也许有人可以根据这些发现提出更好的答案......另一个问题是我最初的问题毕竟是离题的......不太确定在这里做什么使其与其他用户相关。