我怎样才能使jQuery.ready中定义的函数全局可用?

我有一个function,从url上剥离YouTube的ID。 然后,我想要使用这个函数每页10次(在WordPress的循环)。

当我在我的函数脚本标记中给它提供url时,该函数工作的很好,但是当我在循环内启动一组新的脚本标记时,它不起作用。

我需要知道如何在不首先声明的情况下使用我的函数。

所以这是我在标题中的代码:

<script type="text/javascript"> $(document).ready(function() { var getList = function(url, gkey){ var returned = null; if (url.indexOf("?") != -1){ var list = url.split("?")[1].split("&"), gets = []; for (var ind in list){ var kv = list[ind].split("="); if (kv.length>0) gets[kv[0]] = kv[1]; } returned = gets; if (typeof gkey != "undefined") if (typeof gets[gkey] != "undefined") returned = gets[gkey]; } return returned; }; // THIS WORKS alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v")); }); 

但是,当我尝试使用这个页面上的其他地方,这是行不通的。

  <script type="text/javascript"> $(document).ready(function() { alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v")); }; </script> 

Firebug给了我getList没有定义是有道理的,因为它没有。 我能“全球”宣布这个function吗?

你有两个select,把它添加到window对象,使其成为全局的:

 window.getList = function(url, gkey){ // etc... } 

或者将其从文档就绪事件处理程序中移动到全局范围中:

 $(document).ready(function() { alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v")); }); var getList = function(url, gkey){ var returned = null; if (url.indexOf("?") != -1){ var list = url.split("?")[1].split("&"), gets = []; for (var ind in list){ var kv = list[ind].split("="); if (kv.length>0) gets[kv[0]] = kv[1]; } returned = gets; if (typeof gkey != "undefined") if (typeof gets[gkey] != "undefined") returned = gets[gkey]; } return returned; }; 

您可能还想阅读关于使用var functionName = function () {} vs function functionName() {} 这个问题 ,以及关于variables作用域的这篇文章 。

还有一个select是将函数挂起jQuery对象本身。 这样你就可以避免再污染全局名称空间了:

 jQuery.getlist = function getlist(url, gkey) { // ... } 

然后你可以用“$ .getlist(url,key)”

在ready()函数之外声明getList()..

 var getList = function(url, gkey){ var returned = null; if (url.indexOf("?") != .... .... ... }; 

现在,getList将在代码中的任何地方工作:

 $(document).ready( function() { alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v")); }); 

问题是,getList(。)函数的范围。

只需将它定义为脚本顶部的常规函数​​即可:

 <script type="text/javascript"> function getlist(url, gkey){ ... } </script> 

你可以简单地在$.fnvariables中添加你的函数:

 function ($) { $.fn.getList = function() { // ... }; }(jQuery)); 

用法示例:

 $.getList(); 

这就是为jQuery创build基本插件时通常要做的事情。

要将其声明为全局函数,只需删除所有jQuery特定的位。 像这样的东西:

 function getList(url, gkey) { var returned = null; if (url.indexOf("?") != -1){ var list = url.split("?")[1].split("&"), gets = []; for (var ind in list){ var kv = list[ind].split("="); if (kv.length>0) { gets[kv[0]] = kv[1]; } } returned = gets; if (typeof gkey != "undefined") { if (typeof gets[gkey] != "undefined") { returned = gets[gkey]; } } return returned; } 

然后你应该可以从任何地方打电话给它。