我已经习惯于使用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处理程序排序目的(不管时间是多少可以忽略)。