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

时间:2011-07-28 15:02:51

标签: jquery

我已经养成了使用ready函数$(function(){...});启动jquery编码并将所有已准备好的函数放入就绪状态的习惯。

然后我意识到放入就绪功能的一些功能可能不需要在那里。

例如,文档就绪中的事件使用的简单函数可以在它之外声明:

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");
       }
    });
});

});

我搜索了很多以前的问题,似乎无法找到答案。

以这种方式宣布功能之外是否更好,更糟或没有什么不同?

3 个答案:

答案 0 :(得分:15)

如果你在外面声明它们,那就意味着它们存在于全局范围内。

这样做的一个优点是它们可以在document.ready函数之外重用。缺点是它们使全局命名空间变得混乱(如果你愿意,这可以通过命名空间来避免)。

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

最近,我一直把domready处理程序之外的所有东西都放在domready处理程序之外,因为解释器必须在开始执行处理程序之前解析domready处理程序中的所有函数声明并延迟执行你的domready处理程序的类型失败目的(无论时间多么微不足道)。

答案 1 :(得分:6)

更好的

您的代码将更易于阅读。

记住$(document).ready()也只是一个功能。

任何可以打包并放入可能重复使用的函数调用的东西应该是。

以这种方式思考......如果你正在处理按钮的点击事件,你会这样做吗?

答案 2 :(得分:0)

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