我已经养成了使用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");
}
});
});
});
我搜索了很多以前的问题,似乎无法找到答案。
以这种方式宣布功能之外是否更好,更糟或没有什么不同?
答案 0 :(得分:15)
如果你在外面声明它们,那就意味着它们存在于全局范围内。
这样做的一个优点是它们可以在document.ready函数之外重用。缺点是它们使全局命名空间变得混乱(如果你愿意,这可以通过命名空间来避免)。
就个人而言,如果我要重复使用它们,它们就会出去。如果他们需要引用一个只存在于我的domready处理程序范围内的变量或其他东西,它们会进入内部(通常作为匿名函数)。
最近,我一直把domready处理程序之外的所有东西都放在domready处理程序之外,因为解释器必须在开始执行处理程序之前解析domready处理程序中的所有函数声明并延迟执行你的domready处理程序的类型失败目的(无论时间多么微不足道)。
答案 1 :(得分:6)
更好的
您的代码将更易于阅读。
记住$(document).ready()
也只是一个功能。
任何可以打包并放入可能重复使用的函数调用的东西应该是。
以这种方式思考......如果你正在处理按钮的点击事件,你会这样做吗?
答案 2 :(得分:0)
函数应始终在ready或任何load事件之外声明。但是,在使用它们之前,应确保声明这些函数,以避免代码执行中出现任何错误。