我有一个问题涉及在另一个js源文件中调用函数。
我在文件之前使用调用该特定的函数声明了源文件 功能。 我认为这会有效,但它会给出一个未定义的错误。
我在一个文件中有一个函数,它在稍后声明的源文件中调用一个函数。 这将涉及相同的文件,但反过来。
在文档就绪语句(函数)之间声明函数。
有没有办法避免未定义的错误?
这就是我设置它的方式:
<script type="text/javascript" src="includes/livetabs.js"></script>
<script type="text/javascript" src="includes/chat.js"></script>
//this is in the chat.js file
$(document).ready(function(){
function chatWith(chatuser) {
check=iscookieUsername();
if (!check){
chatusersuspended=chatuser;
showchatinlogform();
}
createChatBox(chatuser);
$("#chatbox_"+chatuser+" .chatboxtextarea").focus();
}
});
//this is in the livetabs.js file
$(document).ready(function(){
function iscookieUsername(){
if (!tbusername){
return false;
}
if (issessionusername){//flag if session has already been set
return true;
}
$.ajax({
url: "includes/livetabs.php",
data: ({username: tbusername, action: "setsessionusername"}),
cache: false,
type: "POST",
dataType: "json",
success: function(data) {
//store username in php session
//some personal user preferences returned
usernamecookie=data.cookie;
trackuser=data.track;
issessionusername=1;
}});
return true;
}
});
谢谢,理查德
答案 0 :(得分:7)
如果您在$(document).ready方法调用中定义了函数,则它们将不会从外部显示。尝试在ready方法调用之外定义它们。
$(document).ready(
function()
{
var test = function() { alert('test'); };
test(); //It will work here.
anotherTest(); //This will also work.
}
);
function anotherTest() { alert('anotherTest'); };
test(); //You can't call test function here because test is defined inside the anonymous function passed to the 'ready' method.
anotherTest(); // Alerts 'anotherTest'.
如果这不是您的代码布局方式,请发布您的源代码,以便确定问题。
答案 1 :(得分:2)
您的第一个源文件(包含您要调用的函数的文件)可能存在语法错误,导致该函数无法使用。
此外,加载文件的顺序无关紧要,无论如何都可以使用该功能。例如:
function foo() { alert('foo!'); }
foo();
bar();
function bar() { alert('bar!'); }
编辑:看起来像SolutionYogi预测的正确答案。但作为参考,我会离开我的。
答案 2 :(得分:0)
在浏览该特定页面之前,使用谷歌浏览器并按F12查看开发人员工具。 在网络中,您可以看到加载了哪些文件,搜索包含您的功能的脚本。 。 (您也可以在脚本上进行过滤)它应该在顶部,并且您的调用脚本应该稍后加载。如果未加载,则先在页面中包含该文件。希望能解决问题。