正确使用jquery $(document).ready()声明在ready()中调用的函数



我已经养成了用ready函数$(function(){...});开始jquery编码的习惯,并将所有从ready调用的函数放在ready中。

然后我意识到,放在ready函数中的一些函数可能并不需要在那里。

例如,document ready中事件使用的简单函数可以在它之外声明:

function checkEmail(objelement){
   var emailRx = /^([w-.]+@([w-]+.)+[w-]{2,4})?$/;
   return emailRx.test(objelement.val()) ? true : false;
}

然后在里面使用:

//code snippet for example
$(function(){
$("form[name='contactform']").submit(function(){
    $("input[type=text]").each(function(){
        if($(this).attr("id") == "email" && !checkEmail($(this))) { 
            $(this).prev().css("color","red");
       }
    });
});
});

我搜索了许多以前的问题,似乎找不到答案。

以这种方式在ready之外声明函数是更好,更坏,还是没有什么不同?

如果您在外部声明它们,则意味着它们存在于全局作用域中。

这样做的一个优点是它们可以在文档之外重用。准备功能。缺点是它们会使全局命名空间变得混乱(如果需要,可以通过命名空间来避免这种情况)。

就我个人而言,如果我要重复使用它们,它们会被放在外面。如果它们需要引用一个变量或其他只存在于domready处理程序范围内的东西,它们就会进入(通常是匿名函数)。

最近,我一直在把我能做的一切都放在domready处理程序之外,因为解释器在开始执行处理程序之前必须解析domready处理程序中的所有函数声明,而延迟执行domready处理程序有点破坏了目的(不管时间是多么微不足道)。

更好

你的代码将更容易阅读。

记住$(document).ready()也只是一个函数。

任何可以打包并放入可能可重用的函数调用中的东西都应该被打包。

这样想……如果你正在处理一个按钮的点击事件,你会做同样的事情吗?

函数应该总是在ready或任何load事件之外声明。但是您应该确保在使用这些函数之前声明它们,以避免在代码执行中出现任何错误。

最新更新