当前位置:  开发笔记 > 编程语言 > 正文

jQuery和Drupal页面加载

如何解决《jQuery和Drupal页面加载》经验,为你挑选了1个好方法。

我想在drupal站点中执行jQuery $(document).ready().虽然我知道我可以把它放在索引页面中,但这非常麻烦而且是黑客攻击.

我想知道的是是把这个正确的位置,这也将需要特定的主题,因为我不希望所有的主题都使用它.

在此先感谢您的帮助.


甜蜜的成功,感谢你们两位的帮助,我只是对这个问题进行了最后的修改.现在我已经有了这个,我需要执行jQuery代码来更新文档,我可以使用上下文来修改文档吗?



1> VonC..:

不是Drupal专家,但是这个博客条目表明,从Drupal 6开始,你根本不需要$(document).ready()在我们的jQuery代码中包含该函数.

相反,您可以将所有代码放在您指定为属性的函数中Drupal.behaviors.

misc/ directoryDrupal安装中,我们不仅有jquery.js文件,而且我们还有drupal.js(和其他几个js文件,控制特定于某些页面或管理功能的功能,例如upload.js),它控制着一般在Drupal中使用jQuery.

它声明了Drupal JavaScript对象,目的是包含需要被其他js文件访问和使用的属性.例如,Drupal.settings属性用于将模块设置数组传递给该模块的js代码.你只需在php代码中调用drupal_add_js()并确保第二个参数作为"setting"传入,例如:

drupal_add_js(array('mymodule' => $array_of_settings), 'setting'); 

然后,在您的js文件中,您可以在Drupal.settings.mymodule中访问这些设置.因此,您使用mymodule属性扩展了Drupal.settings对象,该属性本身就是一个包含所有设置的对象.

Drupal对象的另一个属性是行为对象,即Drupal.behaviors,当我们希望我们的模块添加新的jQuery行为时,我们只是扩展这个对象.模块的整个jQuery代码可以像这样构造:

Drupal.behaviors.myModuleBehavior = function (context) 
{
    //do some fancy stuff
};

但是,您可能想知道,所有这一切都是声明一个函数 - 它甚至被调用了什么?嗯,这都是在drupal.js中照顾的.它有一个$(document).ready调用Drupal.attachBehaviors函数的函数,函数循环遍历Drupal.behaviors调用其每个属性的对象,这些函数都是上面各种模块声明的函数,并作为上下文传入文档.

这样做的原因是,如果你的jQuery代码进行AJAX调用导致新的DOM元素被添加到页面,你可能希望你的行为(例如隐藏所有h3元素或其他)作为新内容附加到好.但是,由于在加载和Drupal.attachBehaviors运行DOM时它不存在,因此没有附加任何行为.但是,通过上述设置,您需要做的就是调用Drupal.behaviors.myModuleBehavior(newcontext),这newcontext将是新的,AJAX提供的内容,从而确保行为不会再次附加到整个文档.有关如何使用此代码的完整示例,请参见此处

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有