在jQuery中调用方法

时间:2011-12-03 17:57:51

标签: javascript jquery html fancybox

我有这个方法:

checkFancyBox=function(){
  ldValue=LD(user,'admin')+LD(pass,'admin');
  if(ldValue<2){
    myHashMap[pass.concat(user)]=ldValue;
    $.fancybox({
      content: "<span style='color:black'>Wrong username or password. </span>", 
      showCloseButton: true,
      transitionIn: "elastic"
    });
    $('#funny').show("");
    return false;  
  }
};

当它放在:

中时
$(document).ready(function() { 
  //... 
  checkFancyBox(); 
  //...
  checkFancyBox=function(){ /*...*/ };
};

它崩溃并立即刷新,

当它被放置在$(文件).ready ....之外时,它正在工作,

但由于某种原因,它不会显示fancybox的内容,

再次,立即刷新。

我应该在哪里放置它以及如何使其显示内容并仅在

时继续

按下fancybox上的'close'按钮?

谢谢你!

1 个答案:

答案 0 :(得分:3)

这是一个悬挂问题。

checkFancyBox=function(){...};
};

声明提升到函数的顶部,但不是初始化。所以,当你有

$(document).ready(function() { ... 
     //checkFancyBox declaration is hoisted to here, and is undefined
     checkFancyBox(); //calling an undefined variable is an error

     checkFancyBox = function(){...}; //now checkFancyBox is initialized, but too late to prevent the error
     };

将此声明放在document.ready处理程序的外部会导致此声明和初始化在处理程序运行之前发生,因此checkFancyBox具有值,并且可以调用。如果您选择坚持使用原始方式声明该功能,请确保在其前面放置var

var checkFancyBox = function(){...};

但请注意,该函数可以简单地声明为

function checkFancyBox(){
  //...
}

另一方面,如果你希望函数是document.ready处理程序的本地函数,那么只需将声明移到该处理程序的顶部:

$(document).ready(function() { ... 
    var checkFancyBox = function(){...};
    //checkFancyBox declaration and initialization are both accomplished, 
    //and the function is safe to call

    checkFancyBox();
};