繁体   English   中英

将jQuery添加到Drupal模块

[英]Adding jQuery to Drupal module

我决定使用将文件包含在我的信息文件中的方法。 这是我写的:

scripts[] = https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js
scripts[] = screenshot.js
scripts[] = html2canvas-master/dist/html2canvas.js

我在screenshot.js中混合了javascript和jquery。 javascript部分工作正常,但是像$(“#btn”)。html(“ testing”)这样简单的内容却无法正常工作。 那么jQuery是否在此处错误添加?

这是将javascript文件添加到站点上每个页面的一种方法(启用该模块时)。

但是,jQuery已与Drupal捆绑在一起(在无冲突模式下 )。 那可能是您的问题。 如果您需要更新到jQuery 2.x,则可能要使用jQuery Update模块 您需要此模块,因为它提供了一个兼容性层,因此一旦您更新jQuery,Drupal自己的JavaScript仍然可以使用。 否则,您将遇到一些兼容性问题。

Drupal 7包含标准安装的jQuery。 它可能比您需要的版本稍旧。

找出jQuery Drupal的版本正在加载

关闭js聚合后(从管理菜单中选择“配置”>“开发”>“性能”),加载页面并使用浏览器工具检查代码。 您应该在<head>看到随页面加载的所有javascript。 如果jQuery版本不包含所需的功能,请添加模块jQuery Update 配置此模块将允许您选择所需的jQuery版本。

在您的Drupal网站上使用jQuery

创建自定义javascript时,您可以利用Drupal js行为,这在“了解Drupal中的JavaScript行为”一文中有详细介绍。 或者,您可以使用旧的$( document ).ready()

如何在行为和准备文档之间进行选择

如果您的页面是您将要使用的行为:

  1. $(document).ready()事件触发后加载AJAX内容$(document).ready()需要对该新内容采取行动。 行为将遍历该新内容,而只是遍历新内容,因此您不必疯狂地增加事件侦听器。
  2. 您拥有的自定义javascript仅适用于您网站的一小部分,因此不应在每个页面上加载。 使用行为定义上下文。
  3. 需要jQuery知道从数据库中提取的值/由PHP计算得出的值。 通过行为,您可以将值从PHP(服务器端)传递到javascript(客户端)。

但是$(document).ready()仍然可以正常工作。 它是命名空间,并且为了使用熟悉的$('。my-target')语法,您需要将自定义jQuery包装在包装器中,如下所示:

(function ($) {
  // All your code here
  $(document).ready(function(){
    $('.my-paragraph).css('border','1px solid lime');
    console.log('jQuery reporting for duty!');
  });
}(jQuery));

查看Drupal文档以获取更多信息 确保语法紧凑! 在某些情况下,这些分号可能是可选的,但Drupal肯定对此有些不满。

  1. 您无需在主题信息文件中添加scripts[] = https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js 因为jQuery已与以下版本的Drupal安装捆绑在一起。

    • Drupal 7.42-jQuery 1.4.4
    • Drupal 8.1.2(最新)-jQuery 2.1.4
  2. 如果您需要其他版本的jQuery,请安装jquery_update模块。 由于与核心JavaScript不兼容,该模块解决了许多冲突。

  3. Drupal删除了jQuery的全局$包装。 您可以从这里查看历史和论点

  4. 包装所有代码的行为是添加自己的JavaScript代码的首选方法,而不是$(document).ready()

     (function($) { Drupal.behaviors.yourThemeName = { attach: function(context, settings) { // enter code here // this is example $('body', context).addClass('test'); }, } }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM