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

我已经习惯于使用ready函数$(function(){…})开始jquery编码;并将准备好的所有调用功能准备就绪。

然后我意识到有些功能放在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");
       }
    });
});

});

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

是否更好,更糟,或没有什么不同,以这种方式宣布职能以外的准备?

解决方法

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

这样做的优点是它们可以在document.ready函数之外重用。缺点是它们混淆了全局命名空间(如果需要,可以通过命名空间来避免)。

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

最近,我已经把我可以在domready处理程序之外的所有东西,只因为解释器必须在开始执行处理程序之前解析domready处理程序中的所有函数声明,并延迟执行domready处理程序排序目的(不管时间是多少可以忽略)。

相关文章

jQuery表单验证提交:前台验证一(图文+视频)
jQuery表单验证提交:前台验证二(图文+视频)
jQuery如何实时监听获取input输入框的值
JQuery怎么判断元素是否存在
jQuery如何实现定时重定向
jquery如何获取复选框选中的值