【问题标题】:Proper use of jquery $(document).ready() when declaring functions called within ready()声明在 ready() 中调用的函数时正确使用 jquery $(document).ready()
【发布时间】:2011-07-28 15:02:51
【问题描述】:

我已经养成了使用准备函数$(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");
       }
    });
});

});

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

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

【问题讨论】:

    标签: jquery


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      更好

      您的代码将更易于阅读。

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

      任何可以打包并放入潜在可重用函数调用的东西都应该是。

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

      【讨论】:

      • 在我的代码方面,我是一个整洁的怪胎,这确实是促使我首先开始移动函数的原因。 +1
      【解决方案3】:

      函数应始终在就绪或任何加载事件之外声明。但是你应该确保在使用它们之前声明这些函数,以避免代码执行中的任何错误。

      【讨论】:

      • 当 $(document).ready() 事件触发时,页面标题中声明的所有函数都将可用。
      • 更重要的是,在 JavaScript 范围内任何地方声明的函数都可以在整个范围内访问(是的,您可以调用一个函数并在后面的行声明它)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2012-02-17
      • 2014-01-13
      • 1970-01-01
      相关资源
      最近更新 更多