我有两个独立的js文件:
//first.js
$(document).ready(function(){
$("#someButton").click(function(event){
showMessageBox("test");
});
});
和第二个
$(document).ready(function(){
alert('csdfsdf');
function showMessageBox(msg) {
alert("something");
$('#messageBox').text(msg);
$('#messageBox').dialog('open');
}
$("#messageBox").dialog({
bgiframe: true,
autoOpen: false,
height: 200,
width: 300,
modal: true,
buttons: {
'Ok': function() {
$(this).dialog('close');
window.location.reload(true);
}
}
});
});
第二个文件中的showMessage()函数我想在其他jquery-style js文件中使用它,就像在第一个文件中一样。问题是当我尝试使用它时,我得到一个错误,说showMessage()是未定义的。
我调用的每个其他函数都会发生这种情况,该函数位于单独的jquery样式文件中。如果showMessage()函数不在$(document).ready(function(){.....})中;然后它被调用,但它随着jquery无法使用。
我还确保包含showMessage()函数的文件在调用它的文件之前加载。
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:3)
从我所看到的,你在调用中使用了错误的函数名,声明的函数是showMessageBox
,你正在调用showMessage
。此外,您需要在document.ready
块之外声明该函数,因此它在全局上下文中可用。
从一个document.ready
块声明的函数无法从其他document.ready
块访问,我之前已执行过该测试。看到这个答案:
Can you have multiple $(document).ready(function(){ ... }); sections?
答案 1 :(得分:1)
您正在第二个文件中的文档就绪方法中定义ShowMessageBox()函数。将声明移到ready方法之外应该允许您访问它。此外,您正在调用ShowMessage(),但已定义了一个ShowMessageBox()方法。
答案 2 :(得分:1)
您正在第二个document.ready
函数中定义showMessage,因此它只在该函数中具有范围(嗯,这不是严格正确的,但它绝对没有其他 document.ready function)。
解决方案是将其移动到两个功能都可以访问的范围。实现这一目标的最简单方法是将其置于其他功能之外,从而为其提供全局范围。
正确的名称(showMessage
vs showMessageBox
)通常也有帮助。
答案 3 :(得分:0)
尝试重新组织您的功能的工作方式。 你可以有一个第一个“util.js”文件,如(outsite,没有document.ready函数):
function showMessageBox(msg,msgBox) {
alert("something");
$(msgBox).text(msg);
$(msgBox).dialog('open');
}
然后,在你需要的文件上:
//first.js
$(document).ready(function(){
$("#someButton").click(function(event){
showMessage("test","#messageBox");
});
});
我会说因为你在文件加载后加载了这个函数,所以在第一个文件尚未加载到内存时调用它有一个优先级顺序问题(即使你放了那个文件)第一)。将它放在document.ready()函数之后,您可以在浏览器读取它并将其定义到 globalesque 范围时立即定义它。
答案 4 :(得分:0)
尝试以下代码。基本上,将showMessage函数放在主要范围内并在任何地方使用它。您在$(document).ready()函数范围内定义了showMessage,使其无法从外部进行。
//first.js
function showMessage(msg) {
$('#messageBox').text(msg);
$('#messageBox').dialog('open');
}
$(document).ready(function(){
$("#someButton").click(function(event){
showMessage("test");
});
});
$(document).ready(function(){
$("#messageBox").dialog({
bgiframe: true,
autoOpen: false,
height: 200,
width: 300,
modal: true,
buttons: {
'Ok': function() {
$(this).dialog('close');
window.location.reload(true);
}
}
});
});
答案 5 :(得分:0)
我刚刚通过谷歌来解决此问题尚未解决的问题:
如果你有两个不同的就绪块,并且你想调用放在不同就绪块中的函数,那么只需将被调用函数定义为更全局。
可以使用window.YourFunctioName=function(){...}
。
在您的情况下,解决方案是将消息框定义为更全局: ` $(文件)。就绪(函数(){
window.showMessageBox=function(msg) {...
`