jquery单独的js文件

时间:2009-09-08 12:32:32

标签: jquery

我有两个独立的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()函数的文件在调用它的文件之前加载。

任何帮助都将不胜感激。

感谢。

6 个答案:

答案 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) {...

`