document.ready jquery代码中未定义Javascript函数
我已将jquery包含在脚本中,现在正在尝试制作此上载进度条脚本的jquery版本: 以下是我的尝试:document.ready jquery代码中未定义Javascript函数,javascript,jquery,function,scope,anonymous-function,Javascript,Jquery,Function,Scope,Anonymous Function,我已将jquery包含在脚本中,现在正在尝试制作此上载进度条脚本的jquery版本: 以下是我的尝试: $(document).ready(function () { function startProgress(uid) { console.log("starting progress"); setTimeout('getProgress("' + uid + '")', 500); //some more stuff }
$(document).ready(function () {
function startProgress(uid) {
console.log("starting progress");
setTimeout('getProgress("' + uid + '")', 500);
//some more stuff
}
function getProgress(uid) {
console.log("getting progress");
$.ajax({
type: "GET",
url: 'upload_getprogress.php?uid=' + uid,
success: function (msg) {
progress = msg;
setTimeout('getProgress("' + uid + '")', 100);
// do some more stuff
}
});
}
$('#upload').submit(function () {
startProgress('<?php echo $uid; ?>');
});
});
$(文档).ready(函数(){
函数startProgress(uid){
console.log(“启动进度”);
setTimeout('getProgress('uid+'),500);
//再来点东西
}
函数getProgress(uid){
console.log(“取得进展”);
$.ajax({
键入:“获取”,
url:'upload_getprogress.php?uid='+uid,
成功:功能(msg){
进度=味精;
setTimeout('getProgress('+uid+'),100);
//多做点事
}
});
}
$('#upload')。提交(函数(){
startProgress(“”);
});
});
但我得到了一个错误:
未捕获引用错误:未定义getProgress
怎么样
我试图将函数放在document.ready()
之外,但没有用。我甚至在startProgress
内部的开头定义了getProgress
,但它似乎无法识别该函数。我做错了什么?getProgress()
是在调用document.ready()
的范围内定义的。如果将字符串参数传递给setTimeout()
,则将在全局范围内对其进行计算。所以从那里看不到您的方法
您可以更改代码,以使用以下匿名函数:
setTimeout( function() {
getProgress( uid);
}
, 100);
请使用:
setTimeout(function() { getProgress( uid ); }, 500 )
这应该可以正常工作。函数getProgress(uid)在
$(document).ready()中定义,因此它在私有范围而不是全局范围内。所以要使用它,只需将其移动到全局。无法进行双重检查,但我猜这是因为提交回调的范围。试着按照这些思路去做
$(document).ready(function(){
$('#upload').submit(function(){ window.startProgress('<?php echo $uid; ?>'); });
});
var startProgress = function(uid) {
console.log("starting progress");
setTimeout('getProgress("' + uid + '")', 500);
//some more stuff
};
var getProgress = function(uid) {
console.log("getting progress");
$.ajax({ type: "GET",
url: 'upload_getprogress.php?uid=' + uid,
success: function(msg) {
progress = msg;
setTimeout('getProgress("' + uid + '")', 100);
// do some more stuff
}
});
};
window.startProgress = startProgress;
window.getProgress = getProgress;
$(文档).ready(函数(){
$('#upload').submit(函数(){window.startProgress(''';});
});
var startProgress=函数(uid){
console.log(“启动进度”);
setTimeout('getProgress('uid+'),500);
//再来点东西
};
var getProgress=函数(uid){
console.log(“取得进展”);
$.ajax({type:“GET”,
url:'upload_getprogress.php?uid='+uid,
成功:函数(msg){
进度=味精;
setTimeout('getProgress('+uid+'),100);
//多做点事
}
});
};
window.startProgress=startProgress;
window.getProgress=getProgress;
如果您像
setTimeout('getProgress('+uid+'),500)
,
必须将函数getProgress
置于全局范围内,
如果使用setTimeout函数,如setTimeout(getProgress(uid),500)
您可以在jQuery ready函数中定义函数getProgresssetTimeout函数语法错误,因此语法正确,可以完美地工作。这将使用文本字符串调用getProgress<代码>获取进度(“+uid+”)
您不需要将函数定义为变量,然后再定义window.function=function
,但除此之外,这应该可以实现,所以+1:)谢谢,它现在可以工作了。但我的代码不起作用的原因是什么?早些时候,我确实尝试将函数保留在document.ready()
之外,并将$('#upload').submit()代码保留在内部,但即使这样也不起作用。简单地将函数的定义更改为var=function()
会有什么不同?