我怎样才能使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>
你可以简单地在$.fn
variables中添加你的函数:
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; }
然后你应该可以从任何地方打电话给它。