gpt4 book ai didi

jquery 未从 运行

转载 作者:行者123 更新时间:2023-12-01 06:59:28 25 4
gpt4 key购买 nike

我正在调用一个在 header 的自定义 js 文件中加载的函数。

<head>

<script type="text/javascript" src="/js/jquery-1.5.min.js"></script>
<script type="text/javascript" src="/js/my.js"></script>

my.js 有

$(document).ready(function(){
function testFunction(){
alert("inside testfunction");
}
});

点击几次后,它就会加载到 <body> 中:

$("#someid").live($.myapp.event.play, function(event) {
alert("this works");
testFunction();
});

警报“这有效”,触发,但然后没有任何反应,我做错了什么?

最佳答案

这是一个范围问题。当您在 $(document).ready 中定义变量(或对象,例如函数)时它们的功能是临时的。

var x = 1;var y;$(document).ready(function() {    var x= 'a billiondy'; //does not affect the global variable    y=2;    z=3;    window.a = 4;});

此时window有 3 个变量,x , y ,和a分别等于1,2,4。

因为x重新声明为 var ,它不会被覆盖(它只是一个局部变量)。

因为y定义于 window ,作用域链找到 y 并假设您的意思是 window.y

因为znull (从未声明)ready 函数现在声明一个局部变量。当ready函数关闭时,z没有在任何事件范围内引用,因此它被垃圾收集。

同样的事情也发生在 a 上,但它不会被垃圾收集,因为您明确地说“这是一个窗口变量”。因此a是在全局范围内定义的。明白了吗?

编辑:这比您想要的更多答案,但理解这一点很重要。在某些时候,您会问“为什么这样那样的变量被覆盖/未定义”。答案就在作用域链中。

第二次编辑:

为了回答Andre的问题(见评论),以下代码无效:

function testFunction(){ mySecondFunction(); }  //ran first$(document).ready(function(){ // ran third;        window.mySecondFunction = function(){alert("this will work");}    });testFunction(); // ran second

原因是ready函数中的代码是在加载其他所有内容之后运行的。因此,当 testFunction 运行时(最后一行), mySecondFunction 未定义。如果您尝试过,这基本上与您会犯的错误相同:

function test() { test2() };function test2() {alert('wtf?')};

任何不在就绪函数中的代码都会在就绪函数中的任何代码之前执行。但是,在文档加载(并且就绪函数已触发)之后执行的任何代码都可以访问 mySecondFunction,因为它现在是在窗口范围中定义的。考虑以下因素。

function testFunction(){ mySecondFunction(); }$(document).ready(function(){        window.mySecondFunction = function(){alert("this will work");}    });//testFunction(); erroneous do not uncomment!$(document).click(function() {testFunction();}); //works fine//$("body").click(function() {testFunction();}); //does nothing

如果您单击文档,您将在执行就绪函数后单击,因此未注释的行可以正常工作。它后面的行不执行任何操作(如果它位于 <head> 标记中),因为此时没有正文,因此 $("body")返回一个空的 jquery 列表。 javascript 的年代几乎和范围一样令人困惑。

关于jquery 未从 <body> 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5238044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com