2009-12-07 60 views
1

我想了解如何在使用Google CDN的google.load方法加载时使用jQuery。与google.load一起使用jQuery

将init代码放在setOnLoadCallback函数中效果很好,但在标记中为事件处理函数定义函数似乎不起作用。在下面的例子中,P按钮按预期工作,但Div按钮不起作用。

是的,在这个例子中,我可以把div的onclick处理程序也在setOnLoadCallback功能,但是否意味着所有 jQuery代码已经在那里?

帮助?由于

<p id="p">Content</p><button type="button" id="btn1">P</button> 

<div id="div">Div</div><button type="button" id="btn2" onclick="btn2()">Div</button> 

<script src="http://www.google.com/jsapi"></script> 

<script> 

function btn2() { 
$("#div").toggle("slow"); 
} 

google.load("jquery", "1.3.2"); 
google.setOnLoadCallback(function() { 
$("#btn1").click(function() { 
     $("p").toggle("slow"); 
}); 
}); 

</script> 

回答

0

一个JQ的关键点是要低调所以你不应该使用<element onclick="..."></element>。您应始终使用$(selector).click()。此外,您通常希望将此合并到一个单独的$(document).ready();或external脚本中。

+0

我同意但我继承了很多嵌入事件处理程序的标记:-(我想在事件处理程序的实现中使用jQuery 从迄今为止的响应看来,这可以**不是使用google.load技术完成的,它必须使用库的直接路径来完成,所以这似乎是更灵活的方法,不知道为什么谷歌推荐使用google.load! – 2009-12-07 16:29:11

+0

我个人不使用CDN我知道好处,但我不喜欢让我的东西超出我的控制... id相当jsut使用缩小器来压缩我所有的CSS到singel文件和所有我的js到服务器端的单个文件之前我发送,我没有得到缓存的好处,但我可以与更好的控制和可用性的garauntee住在一起。我不是所有相信云的:-) – prodigitalson 2009-12-07 16:40:06

+0

当我只支持一个环境时,我明白你的观点。但是当你有十几个测试环境时,在所有这些服务器上更新JS框架/库的最新版本是一件麻烦事,更容易指向CDN并让别人去做。谢谢。 – 2009-12-07 18:21:50

2

将您的Google jsapi脚本调用和google.load置于您文档中<head>的顶部。运行时,它只会输出

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" 
    type="text/javascript"></script> 

其中google.load是。

然后把里面所有的jQuery代码:

$(function() { 
    // all your jQuery code here 
}); 

这是简写$(document).ready(function(){ });

0

是的,你需要的,如果你要加载jQuery的这种方式已经装setOnLoadCallback所有jQuery代码。在该事件触发之前,不能保证jQuery脚本已经加载,因此该函数之外的任何jQuery代码可能无效。如果您想在该事件之外定义jQuery代码,您可以通过从Google的CDN网址加载jQuery来代替由google.load()动态加载jQuery代码。

来自谷歌的CDN的jQuery的URL看起来是这样的:

http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js

你只需将其包含在文档的头部作为外部脚本资源如常。您仍然可以获得Google CDN的好处,因为大多数浏览器都会在该位置拥有jQuery的缓存副本(假设他们访问了使用Google CDN的其他网站)。