【js与jquery】研究了下这个不错的jquery代码

时间:2021-08-13 05:37:37
var isdebugging = false;//是否调试JS
var dataType = isdebugging?'text':'json';//数据类型
function setLang(t){
	var lang = $(t).val();
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var win = $.dialog.top;
	var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});
	$.ajax({type: "POST",dataType:dataType,url: win.siteaurl+'/main/setlang',data: 'lang='+lang,
		success: function(data){
			if(data.status==200){
				parent.main.location.reload();
				myDialog.close();
			}else{
				showmsg(myDialog,data);
			}
		},
		error:function(XMLHttpRequest, textStatus, errorThrown){
			debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'setLang');
		}
	});
}

function setUrl(t,urlid){
	var val = $(t).val();
	if(val){
		$("#"+urlid).val(val);
	}
}

/*
 *1、当我们在模板文件中点击 "编辑" 按钮时,会调用admin.public.js中的"submitTo()"函数
 *模板中:<a class="edit" title="编辑" href="javascript:submitTo('http://www.cicms.com/index.php?/admin/usergroup/edit/6','edit')"></a>
 *url:要请求的url,如:"http://www.cicms.com/index.php?/admin/usergroup/edit/6"
 *func:操作处理函数,如:"edit"-编辑操作  "add"-代表添加操作   "del"-代表删除操作  "sdel"-代表单条删除操作
 */
function submitTo(url,func,extra){
	switch(func){//submitTo交给哪个处理函数来处理
		case 'add'://添加操作处理函数
			add(url);//添加操作将有此函数来完成
			break;
		case 'edit'://编辑操作处理函数
			edit(url);//编辑操作将有此函数来完成
			break;
		case 'del'://删除操作处理函数
			del(url,true);//删除操作将有此函数来完成  参数2:true-批量删除
			break;
		case 'sdel'://删除操作处理函数
			del(url,false,extra);//参数1-url 参数2-单条数据删除  参数3-要删除的id
			break;
		case 'order'://排序操作处理函数
			order(url);
			break;
		case 'grant'://授权操作处理函数
			grant(url);
			break;
		case 'save'://保存操作处理函数
			save(url);
			break;
		case 'backup'://备份操作处理函数
			backup(url);
			break;
		case 'optimize'://优化操作处理函数
			optimize(url);
			break;
		case 'upgrade'://更新操作处理函数
			upgrade(url);
			break;
		case 'restore'://恢复操作处理函数
			restore(url);
			break;
		case 'generate'://生成操作处理函数
			generate(url);
			break;
		default:
			break;
	}
}

//下拉菜单 <select onclick="setClass(this)"></select>
function setClass(t){
        //alert($(t).val());//获取当前被选择的下拉菜单项的值
	if($(t).val()==0){//*栏目的情况
		$("#tclass").show();
	}else{
		$("#tclass").hide();
	}
}

function setTid(t){
	var obj = $(t).children("td").children("input");
	if(obj.attr('checked')=='checked'){
		obj.prop('checked',false);
		$(t).children("td").removeClass('listhover');
	}else{
		obj.prop('checked',true);
		$(t).children("td").addClass('listhover');
	}
}

//全选
function checkAll(t,tname){
	tname = tname?tname:'optid[]';//checkbox复选框name属性的值:<input type="checkbox" value="19" name="optid[]">
	var tcheck = $(t).is(':checked');//全选复选框是否被选中,或者var tcheck = $('t').attr('checked');获取是否选中,返回的是checked或者是undefined,不是原来的true和false
	//$("input[name='"+tname+"']").attr('checked',tcheck);//设置选中,只在第一次的时候可是实现全选,第二次及以后将不能实现全选功能了,所以我们选择prop函数来代替attr函数
        $("input[name='"+tname+"']").prop('checked',tcheck);//设置选中
}

function checkAllMethod(t){
	var tcheck = $(t).is(':checked');
	//$("input[name*='_method']").attr('checked',tcheck);//设置选中,只在第一次的时候可是实现全选,第二次及以后将不能实现全选功能了,所以我们选择prop函数来代替attr函数
        $("input[name*='_method']").prop('checked',tcheck);//可多次轮流切换
}

//myfunc_helper.php文件中show_pages()分页函数使用到
function gotopage(num){
	$("#currentpage").val(num);//input输入框中当前页码值
	$('#formpage').attr('action',$("#action").val());//给名称为"formpage"表单的action属性动态赋值
	$('#formpage').submit();//提交表单
}

function nTabs(t,tid,listid,hover,listclass){
	$(t).parent().children().removeClass(hover);
	$(t).addClass(hover);
	$("."+listclass).hide();
	$("#"+listid+tid).show();
}

/*
 *可参考:http://www.planeart.cn/demo/artDialog/_doc/plugin.iframe.html
 *可穿越框架的标准对话框属性的设置,可参考:http://www.planeart.cn/demo/artDialog/_doc/plugin.iframe.html#through
 */
function add(url){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var throughBox = $.dialog.through;//创建一个普通可穿越框架的标准对话框(框架,即:iframe),顶层面需要引用了artDialog才能实现穿越框架
	var myDialog = throughBox({title:lang.add,lock:true});//设置对话框的属性:title-编辑  lock-是否锁定屏幕
        //POST请求:将参数以post方式传递给服务器,如:"/admin/usergroup/add"
        //GET请求:将参数以get方式附加在url后面传递给服务器,如:"http://www.mycms.com/index.php?/admin/usergroup/add"
        //两种向服务器传递数据的方式在这里都是可以的,唯一不同的是POST是隐式提交,而GET则是将参数附加到url后面提交
        //向服务器端提交少量数据时可以考虑使用GET方式,向服务器端提交大量数据时可以考虑使用POST方式
	$.ajax({type: "POST",url:url,dataType:'json',//url:请求的目的地址,必须是一个字符串;dataType:想从服务器得到哪种类型的数据
	    success: function (data) {//请求成功后的处理函数
	    	if(data.status==200){//状态码为200的情况
	    		var win = $.dialog.top;//获取artDialog可用最高层window对象[top],可以用它来操作父页面对象(包括上面的对话框)
	    		//alert(win.document.title);//iframe框架的title标题:X6CMS后台管理中心 - Powered by X6CMS 2.2(20130305)
                        //win.document.title="你伤害了我,还一笑而过";//动态的改变iframe的title标题值
                        myDialog.content(data.remsg);//设置可穿越框架的标准对话框的content内容属性值,为替换后的html模板代码
	    		win.$("#formview").validform();//表单验证
	    		var editors = setEditer(win);//渲染一个kindeditor编辑器,与kindeditor编辑器相关
	    		setSubBtn(win,myDialog,'add',editors);//创建一个添加按钮
	    	}else{
	    		showmsg(myDialog,data);//短暂提示信息
	    	}
	    },
	    error:function(XMLHttpRequest, textStatus, errorThrown){
	    	debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'add');
		}
	});
}
/*
 *可参考:http://www.planeart.cn/demo/artDialog/_doc/plugin.iframe.html
 *可穿越框架的标准对话框属性的设置,可参考:http://www.planeart.cn/demo/artDialog/_doc/plugin.iframe.html#through
 */
function edit(url){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var throughBox = $.dialog.through;//创建一个普通可穿越框架的标准对话框(框架,即:iframe),顶层面需要引用了artDialog才能实现穿越框架
	var myDialog = throughBox({title:lang.edit+"...",lock:true});//设置对话框的属性:title-编辑  lock-是否锁定屏幕
        //POST请求:将参数以post方式传递给服务器,如:"/admin/usergroup/edit/6"
        //GET请求:将参数以get方式附加在url后面传递给服务器,如:"http://www.mycms.com/index.php?/admin/usergroup/edit/6"
        //两种向服务器传递数据的方式在这里都是可以的,唯一不同的是POST是隐式提交,而GET则是将参数附加到url后面提交
        //向服务器端提交少量数据时可以考虑使用GET方式,向服务器端提交大量数据时可以考虑使用POST方式
	$.ajax({type: "POST",url:url,dataType: 'json',//url:请求的目的地址,必须是一个字符串;dataType:想从服务器得到哪种类型的数据
	    success: function (data) {//请求成功后的处理函数
                //alert(url);//http://www.mycms.com/index.php?/admin/usergroup/edit/6
                //alert(data.status);//当在后台点击"编辑"图标时,会执行此行代码
	    	if(data.status==200){//状态码为200的情况
	    		var win = $.dialog.top;//获取artDialog可用最高层window对象[top],可以用它来操作父页面对象(包括上面的对话框)
                        //alert(win.document.title);//iframe框架的title标题:X6CMS后台管理中心 - Powered by X6CMS 2.2(20130305)
                        //win.document.title="你伤害了我,还一笑而过";//动态的改变iframe的title标题值
	    		myDialog.content(data.remsg);//设置可穿越框架的标准对话框的content内容属性值,为替换后的html模板代码
	    		win.$("#formview").validform();//表单验证
	    		var editors = setEditer(win);//渲染一个kindeditor编辑器,与kindeditor编辑器相关
	    		setSubBtn(win,myDialog,'edit',editors);//创建一个 "编辑" 按钮
	    	}else{//状态码为非200的情况
	    		showmsg(myDialog,data);//短暂提示信息
	    	}
	    },
	    error:function(XMLHttpRequest, textStatus, errorThrown){//请求错误时的处理函数
	    	debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'edit');
		}
	});
}

//批量删除
function del(url,ismultiple,tid){//参数2:true-批量删除
	var data;
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	$.dialog.confirm(lang.delnotice, function(){//确定要删除数据吗?
		if(ismultiple){//批量删除
                        //serialize() 方法通过序列化表单值,创建URL编码文本字符串
			data = $("#formlist").find("input:checked").serialize();//删除多条记录的情况,格式:"a=1&b=2&c=3&d=4&e=5"
		}else{
			data = "optid="+tid;//删除单条记录的情况
		}
		if(data==""){
				 $.dialog.tips(lang.pselect);//请选择记录
				 return;
		}
		this.close();//点击 "确定" 按钮后关闭窗口  this-代表confirm框
		var win = $.dialog.top;//获取artDialog可用最高层window对象[top],可以用它来操作父页面对象(包括上面的对话框)
		var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});//对话框
                //data:serialize() 方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
		$.ajax({type: "POST",dataType:"json",url: url,data: data,//data:serialize() 方法通过序列化表单值,创建URL编码文本字符串
			success: function(data){//请求成功后的处理函数 参数data:返回的数据
				if(data.status==200){//状态码为200的情况
					myDialog.close();//关闭对框框
                                        //children():返回的是直接的子元素
					$("#content_list").children().each(function(){
						if($.isArray(data.ids)){//要批量删除的数据ids,一般情况下是一个数组
                                                        //<tr id="tid_1"></tr>
                                                        //substr():返回一个从指定位置开始的指定长度的子字符串
                                                        //所以 this.id.substr(4)的值是1   this-代表每一个子元素
                                                        //jquery的inArray函数相等于php中的in_array()函数,都是用来判断当前元素是否在数组中存在
							if($.inArray(this.id.substr(4),data.ids)>=0){
								$(this).remove();//移除该当前<tr>标签	this代表当前<tr>标签
							}
						}else{//单条删除的情况
							if(this.id.substr(4)==data.ids){
								$(this).remove();//移除该当前<tr>标签	
							}
						}
					});
					$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
				}else{//状态码为非200的情况
					showmsg(myDialog,data);
				}
			},
			error:function(XMLHttpRequest, textStatus, errorThrown){
				debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'del');
			}
		});
	}, function(){
	    $.dialog.tips(lang.unnotice);
	});
}

//排序
function order(url){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var win = $.dialog.top;//获取artDialog可用最高层window对象[top],可以用它来操作父页面对象(包括上面的对话框)
	var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});
	var data = $("#formlist").serialize();//serialize() 方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
	$.ajax({type: "POST",dataType:dataType,url: url,data: data,//data:serialize() 方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
		success: function(data){//请求成功后的处理函数 参数data:返回的数据
			if(data.status==200){//状态码为200的情况
				myDialog.close();//关闭对话框
				$("#content_list").html(data.remsg);//赋值
				$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
			}else{//状态码为非200的情况
				showmsg(myDialog,data);
			}
		},
		error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败后的处理函数
			debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'order');
		}
	});
}

function grant(url){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var throughBox = $.dialog.through;//创建一个普通可穿越框架的标准对话框(框架,即:iframe),顶层面需要引用了artDialog才能实现穿越框架
	var myDialog = throughBox({title:lang.grant,lock:true});
	$.ajax({type: "POST",url:url,dataType: dataType,
	    success: function (data) {//请求成功后的处理函数 参数data:返回的数据
	    	if(data.status==200){//状态码为200的情况
	    		var win = $.dialog.top;//获取artDialog可用最高层window对象[top],可以用它来操作父页面对象(包括上面的对话框)
	    		myDialog.content(data.remsg);//赋值
	    		setSubBtn(win,myDialog,'grant',false);//创建一个 "授权" 按钮
	    	}else{
	    		showmsg(myDialog,data);
	    	}
	    },
	    error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败后的处理函数
	    	debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'grant');
		}
	});
}

//debug模式
function debugging(tobj,url,XMLHttpRequest,textStatus,errorThrown,jsfunc){
	var msg = '<table class="content_view"><tr><td width="110">Js Function:</td><td>function '+jsfunc+'(){}</td></tr>';
	msg += '<tr><td width="110">URL:</td><td>'+url+'</td></tr>';
	msg += '<tr><td>HTTP Status:</td><td>'+XMLHttpRequest.status+'</td></tr>';
	msg += '<tr><td>readyStatus:</td><td>'+XMLHttpRequest.readyState+'</td></tr>';
	msg += '<tr><td>textStatus:</td><td>'+textStatus+'</td></tr>';
	msg += '<tr><td>errorThrown:</td><td>'+errorThrown+'</td></tr>';
	msg += '<tr><td>help:</td><td>http://bbs.x6cms.com</td></tr>';
	tobj.title('error');
	tobj.content(msg);
}
/*
 *参考网址:http://kindeditor.net/
 */
function setEditer(win){
	if(win.$(".editor").length>0){//判断有几个kindeditor编辑器,alert(win.$(".editor").length)的值为1,即:有一个kindeditor编辑器
		var editors = new Array();//创建一个数组
		win.$(".editor").each(function(){
                        //对应模板中:<td colspan="5"><textarea style="width:668px;height:300px;" name="content" id="content" class="editor"><?=isset($view['content'])?htmlspecialchars($view['content']):'';?></textarea></td>
			var idname = this.id;//编辑器id属性值,如:alert(idname)的结果为 "content"
                        //create方法创建一个可视化编辑器,参数1-节点id(id属性值)
			var editor=win.KindEditor.create('#'+idname,{
                                //指定浏览远程图片的服务器端程序
				//指定浏览远程图片的服务器端程序
                                fileManagerJson:siteaurl+"/main/attrlist",//设置默认的后台程序处理文件:"http://www.cicms.com/index.php?/admin/main/attrlist",即:main控制器中的attrlist方法来处理
                                //配置图片分类目录下的不同目录参数,如果继续进行分类,可以传递?fd=xxoo/abc而这种参数,注意不要以/结束,程序未判断,以/结束程序会
				//指定上传文件的服务器端程序
                                uploadJson:siteaurl+"/main/attrupload"	,//设置上传附件的后台程序处理文件:"http://www.cicms.com/index.php?/admin/main/attrupload",即:main控制器中的attrlist方法来处理
				//true时显示浏览远程服务器按钮
                                allowFileManager:true//是否允许浏览服务器已上传文件
			});
			editors.push(editor);//向数组的尾部添加一个元素
		});
		return editors;//kindeditor编辑器不为空的情况
	}else{
		return false;//kindeditor编辑器为空的情况
	}
}

//设置提交按钮:win-windows*对象,tobj-可穿越框架的标准对话框窗口,func-edit或add等,editors-kindeditor编辑器数组
function setSubBtn(win,tobj,func,editors){//设置提交按钮
        //设置可穿越框架标准对话框的button按钮的属性值
	tobj.button({name:lang.submit+"...",//button按钮的名称
		callback:function(){//点击 "提交" 按钮后执行的回调函数
			if(win.$("#formview").validform('validall')){//全局验证
				if(editors){//编辑器存在的情况
                                    var len = editors.length;//编辑器的个数
                                    for(var i=0;i<len;i++){
                                            editors[i].sync();//提交表单前,调用一下kindeditor编辑的sync()方法
                                    }
                                }
                                //win-windows*对象,tobj-可穿越框架的标准对话框窗口,func-edit或add等
                                subOK(win,tobj,func);
                        }else{
            	
                        }
                        return false;
		},
		focus: true
	});
}

//win-windows*对象,tobj-可穿越框架的标准对话框窗口,type-edit或add等
function subOK(win,tobj,type){
	var data = win.$("#formview").serialize();//serialize() 方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5",提示:必须是要有name属性的表单字段会被序列化
        //<input type="hidden" value="http://www.cicms.com/index.php?/admin/usergroup" id="action" name="action">
	var url = win.$("#formview").find("#action").val()+'/'+type;//type:方法名,如:add、del、grant、edit
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});//创建一个简单的对话框窗口
	$.ajax({type: "POST",dataType:dataType,url: url,data: data,//data:serialize() 方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
		success: function(data){//请求成功后的处理函数 参数data:返回的数据
			if(data.status==200){//状态码为200的情况
				if(type=='add'){//如果为 add 操作
					$("#content_list").prepend(data.remsg);//在id属性值为conent_list的元素开头插入内容
                                        //以动画的方式
					$('html,body').animate({scrollTop: 0}, 300);
				}else if(type=='edit'){//如果为 edit 操作
					var thisline = $("#content_list").find("#tid_"+data.id);//查找当前被编辑的行
					thisline.before(data.remsg);//在当前被编辑行前插入新的内容
					thisline.remove();//将当前被编辑行移除
				}
				myDialog.close();//简单对话框窗口关闭
				tobj.close();//可穿越框架的标准对话框窗口关闭
				$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
			}else{//状态码为非200的情况
				showmsg(myDialog,data);
			}
		},
		error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败时的处理函数
			debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'subOK');
		}
	});
}

//备份数据库
function backup(url){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var win = $.dialog.top;//window*窗口对象
        //提示:serialize()方法只序列化有name属性的表单元素,没有name属性的表单元素是不被序列化的
	var data = $("#formlist").serialize();//serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5",提示:必须是要有name属性的表单字段会被序列化
	var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});//创建一个简单的对话框窗口
	$.ajax({type: "POST",dataType:dataType,url: url,data: data,//data:serialize() 方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
		success: function(data){//请求成功后的处理函数 参数data:返回的数据
			if(data.status==200){//状态码为200的情况
				myDialog.close();//简单对话框窗口关闭
				$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
			}else{//状态码为非200的情况
				showmsg(myDialog,data);
			}
		},
		error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败时的处理函数
			debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'backup');
		}
	});
}

//优化
function optimize(url){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var win = $.dialog.top;//windows*窗口对象
        //提示:serialize()方法只序列化有name属性的表单元素,没有name属性的表单元素是不被序列化的
	var data = $("#formlist").serialize();//serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5",提示:必须是要有name属性的表单字段会被序列化
	var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});//创建一个简单的对话框窗口
	$.ajax({type: "POST",dataType:dataType,url: url,data: data,//data:serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
		success: function(data){//请求成功后的处理函数 参数data:返回的数据
			if(data.status==200){//状态码为200的情况
				myDialog.close();//简单对话框窗口关闭
				$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
			}else{//状态码为非200的情况
				showmsg(myDialog,data);
			}
		},
		error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败时的处理函数
			debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'optimize');
		}
	});
}

//执行sql升级
function upgrade(url){
	if($("#formview").validform('validall')){//验证表单数据
                //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
		var win = $.dialog.top;//windows*窗口对象
                //提示:serialize()方法只序列化有name属性的表单元素,没有name属性的表单元素是不被序列化的
		var data = $("#formview").serialize();//serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5",提示:必须是要有name属性的表单字段会被序列化
		var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});//创建一个简单的窗口对话框
		$.ajax({type: "POST",dataType:dataType,url: url,data: data,//data:serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
			success: function(data){//请求成功后的处理函数 参数data:返回的数据
				if(data.status==200){//状态码为200的情况
					myDialog.close();//简单对话框窗口关闭
					$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
				}else{//状态码为非200的情况
					showmsg(myDialog,data);
				}
			},
			error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败时的处理函数
				debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'upgrade');
			}
		});
	}
}

//恢复
function restore(url){
	if($("#formview").validform('validall')){//验证所有表单数据
                //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
		var win = $.dialog.top;//windows*窗口对象
                //提示:serialize()方法只序列化有name属性的表单元素,没有name属性的表单元素是不被序列化的
		var data = $("#formview").serialize();//serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5",提示:必须是要有name属性的表单字段会被序列化
		var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});//创建一个简单的窗口对话框
		$.ajax({type: "POST",dataType:dataType,url: url,data: data,//data:serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
			success: function(data){//请求成功后的处理函数 参数data:返回的数据
				if(data.status==200){//状态码为200的情况
					myDialog.close();//简单对话框窗口关闭
					$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
				}else{//状态码为非200的情况
					showmsg(myDialog,data);
				}
			},
			error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败时的处理函数
				debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'restore');
			}
		});
	}
}

//生成  网站地图
function generate(url){
	if($("#formview").validform('validall')){//验证所有表单数据
                //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
		var win = $.dialog.top;//windows*窗口对象
                //提示:serialize()方法只序列化有name属性的表单元素,没有name属性的表单元素是不被序列化的
		var data = $("#formview").serialize();//serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5",提示:必须是要有name属性的表单字段会被序列化
		var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});//创建一个简单的窗口对话框
		$.ajax({type: "POST",dataType:dataType,url: url,data: data,//data:serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
			success: function(data){//请求成功后的处理函数 参数data:返回的数据
				if(data.status==200){//状态码为200的情况
					myDialog.close();//简单对话框窗口关闭
					$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
				}else{//状态码为非200的情况
					showmsg(myDialog,data);
				}
			},
			error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败时的处理函数
				debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'generate');
			}
		});
	}
}

//保存
function save(url){
	if($("#formview").validform('validall')){//验证所有表单数据
                //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
		var win = $.dialog.top;//windows*窗口对象
                //提示:serialize()方法只序列化有name属性的表单元素,没有name属性的表单元素是不被序列化的
		var data = $("#formview").serialize();//serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5",提示:必须是要有name属性的表单字段会被序列化
		var myDialog = win.$.dialog({fixed:true,lock:true,drag:false});//创建一个简单的窗口对话框
		$.ajax({type: "POST",dataType:dataType,url: url,data: data,//data:serialize()方法通过序列化表单值,创建URL编码文本字符串,格式:"a=1&b=2&c=3&d=4&e=5"
			success: function(data){//请求成功后的处理函数 参数data:返回的数据
				if(data.status==200){//状态码为200的情况
					myDialog.close();//简单对话框窗口关闭
					$.dialog.tips(lang.opersuccess);//操作成功的短暂提示
				}else{//状态码为非200的情况
					showmsg(myDialog,data);
				}
			},
			error:function(XMLHttpRequest, textStatus, errorThrown){//请求失败时的处理函数
				debugging(myDialog,url,XMLHttpRequest,textStatus,errorThrown,'save');
			}
		});
	}
}

function shouquan(url){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	$.dialog({title:lang.edit,lock:true,
		content:lang.loading,
		init:function(){
			var thisobj = this;
			$.ajax({type: "POST",url: url,dataType:'json',
				success: function(data){
					if(data.status==200){
						thisobj.content(data.remsg);
				        thisobj.button({
				        	name:lang.submit,
					        callback: function () {
					            	subOK(thisobj,'shouquan');
					            return false;
					        },
					        focus: true
					    });
			      	}else{
			      		thisobj.close();
			      		showmsg(data);
			      	}
				}
			});
		}
	});
}

//审核
function audit(url,ismultiple,tid){
	var data;
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	$.dialog.confirm(lang.auditnotice, function(){
		if(ismultiple){
			data = $("#formlist").find("input:checked").serialize();
		}else{
			data = "optid="+tid;	
		}
		if(data==""){
				 $.dialog.tips(lang.pselect);
				 return;
		}
		$.dialog({title:lang.audit,lock:true,
		content:lang.loading,
		init:function(){
			var thisobj = this;
			$.ajax({
				type: "POST",
				url: url,
				dataType: dataType,
				data: data,
				success: function(data){
					if(data.status==200){
				       thisobj.close();
				       	$("#content_list").children().each(function(){
							if(this.id.substr(4)==data.id){
								$(this).before(data.remsg);
								$(this).remove();
							}
						});
				    	$.dialog.tips(lang.opersuccess);
			      	}else{
			      		thisobj.close();
			      		showmsg(data);
			      	}
				}
			});
		}
	});
	}, function(){
	    $.dialog.tips(lang.unnotice);
	});
}

//后台编辑模板文件
//<a class="file" href="javascript:editfile('http://www.cicms.com/index.php?/admin/template/editfile','./data/template/default/article_list.php')">article_list.php</a>
//参数1-编辑模板文件的控制器方法;参数2-要被编辑的模板文件的路径
function editfile(url,page){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var win = $.dialog.top;//windows*窗口对象
	win.$.dialog({title:lang.edit,lock:true,
		content:lang.loading,
		init:function(){
			var thisobj = this;//this代表是对话框窗口对象
			$.ajax({
				type: "POST",
				url: url,//请求url:"http://www.cicms.com/index.php?/admin/template/editfile"
				data:"actiontype=0&page="+page,//参数:"actiontype=0&page=./data/template/default/article_list.php"
				dataType: dataType,//json
				success: function(data){//data:返回正在被编辑的模板文件内容
					if(data.status==200){//状态码为200的情况
						thisobj.content(data.remsg);//将模板文件内容赋值给对话框窗口的content属性
                                                thisobj.button({//为对话框窗口对象创建一个按钮
                                                    name:lang.submit,//提交按钮
                                                    callback: function () {//点击 "提交" 按钮时调用的函数
					        	subOK(win,thisobj,'editfile');
                                                        return false;
                                                    },
                                                    focus: true
                                                });
                                        }else{//状态码为非200的情况
                                            thisobj.close();//关闭对话框窗口
                                            showmsg(data);
                                        }
				},
				error:function(XMLHttpRequest, textStatus, errorThrown){
					alert(errorThrown);
				}
			});
		}
	});
}

//取消图片,如:<input type="button" value="取消图片" onclick="unsetThumb('thumb','imgthumb')" class="btn">
//使用场合:文章模型-添加文章内容页面
function unsetThumb(objid,imgobjid){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	var win = $.dialog.top;//windows*窗口对象
	win.$("#"+objid).val('');//将thumb隐藏表单元素的值设置为空,如:<input type="hidden" value="" id="thumb" name="thumb">
	win.$("#"+imgobjid).attr('src',win.baseurl+'data/nopic8080.gif');//将缩略图设置为默认的图片,如:<img width="150" id="imgthumb" onclick="uploadpic(this,'thumb')" src="http://www.cicms.com/data/nopic8080.gif">
}
/*
 * status
 * 200	正常
 * 201:(登录失效)
 * 202:(无权限)
 * 203:(请选择记录)
 * 204:(用户名或密码错误)
 * 205:(提交成功,需刷新本页面)
 * 206:(记录重复)
 * 207:(提交成功,但是验证失败,弹出错误消息)
 * 301:提交成功,需要跳转页面
 * 404:该页不存在;
 */
function showmsg(tobj,data){//参数1-可穿越框架的标准对话框   data-数据
	if(isdebugging){//调试模式
		alert(data);return;
	}
	if(data.status==201){//状态码201:登录失效
		tobj.close();//关闭可穿越框架的标准对话框
		showajaxlogin();
	}else if(data.status==202){//状态码202:无权限
		tobj.close();//关闭可穿越框架的标准对话框
		$.dialog.tips(lang.nopurivew);//短暂提示:无权限;参数: 内容、显示时间(单位秒, 默认1.5)
	}else if(data.status==203){//状态码203:请选择记录
		tobj.close();//关闭可穿越框架的标准对话框
		$.dialog.tips(lang.pselect);//短暂提示:请选择记录;参数: 内容、显示时间(单位秒, 默认1.5)
	}else if(data.status==204){//状态码204:用户名或密码错误
		tobj.close();//关闭可穿越框架的标准对话框
		$.dialog.tips(lang.userorpasserror);//短暂提示:用户名或密码错误;参数: 内容、显示时间(单位秒, 默认1.5)
	}else if(data.status==205){//状态码205:提交成功,需刷新本页面
		tobj.close();//关闭可穿越框架的标准对话框
		location.reload();//短暂提示:提交成功,需刷新本页面;参数: 内容、显示时间(单位秒, 默认1.5)
	}else if(data.status==206){//状态码206:记录重复
		tobj.close();//关闭可穿越框架的标准对话框
		$.dialog.tips(lang.duplicate);//短暂提示:记录重复;参数: 内容、显示时间(单位秒, 默认1.5)
	}else if(data.status==207){//状态码207:提交成功,但是验证失败,弹出错误消息
		tobj.close();//关闭可穿越框架的标准对话框
		$.dialog.tips(data.remsg);//短暂提示:提交成功,但是验证失败,弹出错误消息;参数: 内容、显示时间(单位秒, 默认1.5)
	}else if(data.status==301){//状态码301:提交成功,需要跳转页面
		tobj.close();//关闭可穿越框架的标准对话框
		location.href=data.reurl;//短暂提示:提交成功,需要跳转页面;参数: 内容、显示时间(单位秒, 默认1.5)
	}else if(data.status==404){//状态码404:该页不存在
		tobj.close();//关闭可穿越框架的标准对话框
		$.dialog.tips(lang.notfound);//短暂提示:该页不存在;参数: 内容、显示时间(单位秒, 默认1.5)
	}else{//其它情况
		tobj.close();//关闭可穿越框架的标准对话框
		$.dialog.tips(data.remsg);
	}
}
function showajaxlogin(){
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	$.dialog({title:lang.login,lock:true,
		content:lang.loading,
		init:function(){
			var thisobj = this;
			$.ajax({
				type: "GET",
				url: siteaurl+'/login/ajaxlogin',
				dataType: dataType,
				cache:false,
				success: function(data){
					if(data.status==200){
						thisobj.content(data.remsg);
						thisobj.button({
					        	name:lang.login,
						        callback: function () {
						        	var postdata = $("#ajaxlogin").serialize();
						        	$.ajax({
						        		type: "POST",
											url: siteaurl+'/main/ajaxlogin',
											dataType: dataType,
											data:postdata,
											cache:false,
											success:function(data){
												if(data.status==200){
													thisobj.close();
													$.dialog.tips(lang.opersuccess);
												}else{
														showmsg(data);
												}
											}
						        	});
						            return false;
						        },
						        focus: true
						    });
			      	}else{
			      		thisobj.close();
			      		showmsg(data);
			      	}
				}
			});
		}
	});
}

//上传图片,如:<img width="150" id="imgthumb" onclick="uploadpic(this,'thumb')" src="http://www.cicms.com/data/nopic8080.gif">
//使用场合:文章模型-添加内容页面
function uploadpic(t,picid){//t-this,在这里代表id属性值为"imgthumb"的表单元素
        //如果你需要创建一个可视化编辑器,你需要使用K.create(),格式:create('节点id',选项)
        //如果你仅仅是想初始化一个kindeditor对象,但并不希望创建可视化编辑器,只是想利用它的框架,api等,你可以选择 K.editor(),格式:editor(选项)
        //其实在create()方法中也包含了 new editor() 这个环节
	var editor = KindEditor.editor({
                //指定浏览远程图片的服务器端程序
		fileManagerJson:siteaurl+"/main/attrlist",//设置默认的后台程序处理文件:"http://www.cicms.com/index.php?/admin/main/attrlist",即:main控制器中的attrlist方法来处理
                //配置图片分类目录下的不同目录参数,如果继续进行分类,可以传递?fd=xxoo/abc而这种参数,注意不要以/结束,程序未判断,以/结束程序会
		//指定上传文件的服务器端程序
                uploadJson:siteaurl+"/main/attrupload",//设置上传附件的后台程序处理文件:"http://www.cicms.com/index.php?/admin/main/attrupload",即:main控制器中的attrlist方法来处理
		//true时显示浏览远程服务器按钮
                allowFileManager : true//是否允许浏览服务器已上传文件
	});
	editor.loadPlugin('image', function() {//加载上传图片的插件
		editor.plugin.imageDialog({
			imageUrl : KindEditor('#'+picid).val(),//获取缩略图的路径,如:<input type="hidden" value="data/attachment/image/20140321/6a93ea1041a1edf6a3ebadafb6e762f3.jpg" id="thumb" name="thumb">
			clickFn : function(url, title, width, height, border, align) {
				newurl = url.substr(url.indexOf("data"));//如:"data/attachment/image/20140321/6a93ea1041a1edf6a3ebadafb6e762f3.jpg"
				$('#'+picid).val(newurl);
				if(t){//t-this,在这里代表id属性值为"imgthumb"的表单元素
					$(t).attr('src',url);//重新设置id属性值为"imgthumb"的表单元素的src属性值
				}
				editor.hideDialog();//编辑器隐藏对话框
			}
		});
	});
}

//上传文件,如down.php模型中的:<input type="button" onclick="uploadfile('attrurl','attrname')" class="btn" value="选择文件">
//使用场合:下载模型-添加内容页面
function uploadfile(fileid,filename){
        //如果你需要创建一个可视化编辑器,你需要使用K.create(),格式:create('节点id',选项)
        //如果你仅仅是想初始化一个kindeditor对象,但并不希望创建可视化编辑器,只是想利用它的框架,api等,你可以选择 K.editor(),格式:editor(选项)
        //其实在create()方法中也包含了 new editor() 这个环节
	var editor = KindEditor.editor({
                //指定浏览远程图片的服务器端程序
		fileManagerJson:siteaurl+"/main/attrlist",//设置默认的后台程序处理文件:"http://www.cicms.com/index.php?/admin/main/attrlist",即:main控制器中的attrlist方法来处理
                //配置图片分类目录下的不同目录参数,如果继续进行分类,可以传递?fd=xxoo/abc而这种参数,注意不要以/结束,程序未判断,以/结束程序会
                //指定上传文件的服务器端程序
		uploadJson:siteaurl+"/main/attrupload",//设置上传附件的后台程序处理文件:"http://www.cicms.com/index.php?/admin/main/attrupload",即:main控制器中的attrlist方法来处理
		//true时显示浏览远程服务器按钮
                allowFileManager : true//是否允许浏览服务器已上传文件
	});
	editor.loadPlugin('insertfile', function() {//加载插入文件插件
		editor.plugin.fileDialog({
			fileUrl : KindEditor('#'+fileid).val(),
			clickFn : function(url,title) {
				if($.trim(title)==url){
					title='';
				}
				newurl = url.substr(url.indexOf("data"));//如:"data/attachment/image/20140321/6a93ea1041a1edf6a3ebadafb6e762f3.jpg"
				$('#'+fileid).val(newurl);//如:"data/attachment/image/20140321/6a93ea1041a1edf6a3ebadafb6e762f3.jpg"
				if(filename!=''){//不为空的情况,如:<input type="text" value="" class="input-text" id="attrname" name="attrname">
					$('#'+filename).val(title);//为文件名赋值
				}
				editor.hideDialog();//隐藏对话框
			}
		});
	});
}

//颜色选择器列表:t-"this" colorid:"color"  textid:"title"
//使用场合-文章模型等-给title设置颜色
function colorpicker(t,colorid,textid){
        //颜色数组
	var colorarr = new Array("#000000","#000000","#000000","#000000","#003300","#006600","#009900","#00cc00","#00ff00","#330000","#333300","#336600","#339900","#33cc00","#33ff00","#660000","#663300","#666600","#669900","#66cc00","#66ff00","#000000","#333333","#000000","#000033","#003333","#006633","#009933","#00cc33","#00ff33","#330033","#333333","#336633","#339933","#33cc33","#33ff33","#660033","#663333","#666633","#669933","#66cc33","#66ff33","#000000","#666666","#000000","#000066","#003366","#006666","#009966","#00cc66","#00ff66","#330066","#333366","#336666","#339966","#33cc66","#33ff66","#660066","#663366","#666666","#669966","#66cc66","#66ff66","#000000","#999999","#000000","#000099","#003399","#006699","#009999","#00cc99","#00ff99","#330099","#333399","#336699","#339999","#33cc99","#33ff99","#660099","#663399","#666699","#669999","#66cc99","#66ff99","#000000","#cccccc","#000000","#0000cc","#0033cc","#0066cc","#0099cc","#00cccc","#00ffcc","#3300cc","#3333cc","#3366cc","#3399cc","#33cccc","#33ffcc","#6600cc","#6633cc","#6666cc","#6699cc","#66cccc","#66ffcc","#000000","#ffffff","#000000","#0000ff","#0033ff","#0066ff","#0099ff","#00ccff","#00ffff","#3300ff","#3333ff","#3366ff","#3399ff","#33ccff","#33ffff","#6600ff","#6633ff","#6666ff","#6699ff","#66ccff","#66ffff","#000000","#ff0000","#000000","#990000","#993300","#996600","#999900","#99cc00","#99ff00","#cc0000","#cc3300","#cc6600","#cc9900","#cccc00","#ccff00","#ff0000","#ff3300","#ff6600","#ff9900","#ffcc00","#ffff00","#000000","#00ff00","#000000","#990033","#993333","#996633","#999933","#99cc33","#99ff33","#cc0033","#cc3333","#cc6633","#cc9933","#cccc33","#ccff33","#ff0033","#ff3333","#ff6633","#ff9933","#ffcc33","#ffff33","#000000","#0000ff","#000000","#990066","#993366","#996666","#999966","#99cc66","#99ff66","#cc0066","#cc3366","#cc6666","#cc9966","#cccc66","#ccff66","#ff0066","#ff3366","#ff6666","#ff9966","#ffcc66","#ffff66","#000000","#ffff00","#000000","#990099","#993399","#996699","#999999","#99cc99","#99ff99","#cc0099","#cc3399","#cc6699","#cc9999","#cccc99","#ccff99","#ff0099","#ff3399","#ff6699","#ff9999","#ffcc99","#ffff99","#000000","#00ffff","#000000","#9900cc","#9933cc","#9966cc","#9999cc","#99cccc","#99ffcc","#cc00cc","#cc33cc","#cc66cc","#cc99cc","#cccccc","#ccffcc","#ff00cc","#ff33cc","#ff66cc","#ff99cc","#ffcccc","#ffffcc","#000000","#ff00ff","#000000","#9900ff","#9933ff","#9966ff","#9999ff","#99ccff","#99ffff","#cc00ff","#cc33ff","#cc66ff","#cc99ff","#ccccff","#ccffff","#ff00ff","#ff33ff","#ff66ff","#ff99ff","#ffccff","#ffffff");
	//颜色个数
        var len = colorarr.length;
        //颜色字符串,所有的颜色都放在colorstr字符串内,每行20中颜色,每中颜色都放在一个<td></td>标签中
	var colorstr = '<table class="colorpicker" border="0"><tr><td colspan="21" height="22" class="currentColor"></td></tr><tr>';
	for(var i=0;i<len;i++){//颜色分组,每20种颜色放一行
		if(i==21||i==42||i==63||i==84||i==105||i==126||i==147||i==168||i==189||i==210||i==231){
			colorstr+="</tr><tr>"
		}
		colorstr+='<td style="background-color: '+colorarr[i]+';" width="11" height="11" rel="'+colorarr[i]+'" onMouseOver="colorover(this)" onclick="colorclick(this,\''+colorid+'\',\''+textid+'\')"></td>';
	}
	colorstr +='</tr></table>'//整个颜色放在一个<table></table>标签中
        //artDialog提供了一个jQuery版本,功能与标准版一致,调用只需要把art前缀改成jQuery的命名空间
	$.dialog({
                    id:'colorpicker',
                    follow:t,//this
                    title:lang.colorpicker,//取色器
                    drag: false,
                    resize: false,
                    padding:'0 0',
                    lock: true,//锁定
                    opacity: 0,//透明度
                    content: colorstr,//内容
                    button: [{//创建一个button按钮
                            name:lang.clearcolor,//按钮名称:清除颜色
                            callback: function () {//点击 "清除颜色" 按钮时所调用的函数
                                                $("#"+colorid).val('');//colorid的值:"color"
                                                $("#"+textid).css('color','');//textid的值:"title"
                            }
                    }]
        });
}
//鼠标经过时颜色的变化
//使用场合:文章模型等-给title设置颜色
function colorover(t){//t-this
	var color=$(t).attr('rel');//鼠标所在的颜色位置
	$(t).parent().parent().find(".currentColor").css('background-color',color);//切换当前颜色
}

//单击某一个颜色时出发的函数:t-"this" colorid:"color"  textid:"title"
//使用场合:文章模型等-给title设置颜色
function colorclick(t,colorid,textid){
	var color=$(t).attr('rel');//当前选择的颜色值
	$(t).parent().parent().find(".currentColor").css('background-color',color);//将当前颜色设置为选择的颜色
	$("#"+colorid).val(color);
	if(textid){
		$("#"+textid).css('color',color);//设置标题的颜色
	}
	$.dialog({id:'colorpicker'}).close();//取色器窗口关闭
}

//进入下一级目录:后台->模板文件(模板套系)->进入某一个目录时执行的函数
function enterdir(folder){//如:<a class="folder" href="javascript:enterdir('./data/template/default/css')">css</a>
	if(folder==''){//文件夹为空的情况
		var folder = $("#folder").val();
		var s = folder.lastIndexOf("/");
		var folder = folder.substr(0,s);
	}
	$("#folder").val(folder);//如:<input type="hidden" value="./data/template/default" id="folder" name="folder">
	$("#formlist").submit();//提交表单
}

//调用validform方法:win.$("#formview").validform();//表单验证
(function($) {
	$.fn.validform = function(type){
		var options = new Array();//创建一个数组对象
		var methods = {
			init:function(){//初始化
                                //表单字段class属性值为"validate"的表单字段,但在被验证范围内
                                //如:<select name="category" id="category" class="validate" validtip="required"></select>
				var validfields = form.find(".validate").each(function(){
					options.push(this);
					$(this).bind('blur',function(){//失去焦点时会进行验证
						methods.testing(this);//this代表当前表单字段
					});
				});
			},
			back:function(form){//验证的表单,可参考:form = this;//将this(即:formview表单)赋值给form
				var isvalidok = true;//是否验证通过,初始值为true
				var firstobj;//第一个没有验证通过的表单字段
				form.find(".validate").each(function(){
					if(!methods.testing(this)){//验证未通过
						if(isvalidok){
							firstobj = this;//第一个未被验证通过的表单字段
						}
						isvalidok = false;//将验证标识设置为false
					}
				});
				if(!isvalidok){//没有验证通过的情况
					$('html,body').animate({scrollTop: $(firstobj).prev().offset().top}, 300);
					$(firstobj).focus();//没有验证通过的表单字段得到焦点
				}
				return isvalidok;
			},
			testing:function(obj){
                                //如:<select name="category" id="category" class="validate" validtip="required"></select>
				var rules = $(obj).attr('validtip');//获取验证提示属性值,如:validtip="required"
				var val = $(obj).val();//获取当前表单字段的值
				var rulearr = rules.split(",");//有可能有多个验证条件:validtip="required,required,required,required"
				var len = rulearr.length;//验证条件个数,一般情况下值为1
				var msg = '';//提示信息
				var isrequire = rules.indexOf("required")>=0?true:false;//是否要求验证
				for(var i=0;i<len;i++){
					var rule = rulearr[i].split(":");
					switch(rule[0]){
						case "required"://不为空等验证
							msg+=methods.required(obj,val);
							break;
						case "minsize"://最小值
							msg+=methods.minsize(val,rule[1],isrequire);//可能是这种情况:validtip="minsize:5,maxsize:10"
							break;
						case "maxsize"://最大值
							msg+=methods.maxsize(val,rule[1],isrequire);//可能是这种情况:validtip="minsize:5,maxsize:10"
							break;
						case "email"://邮箱验证
							msg+=methods.email(val,isrequire);//可能是这种情况:validtip="minsize:5,maxsize:10"
							break;
						case "equals"://是否相等验证
							msg+=methods.equals(val,rule[1]);//可能是这种情况:validtip="minsize:5,maxsize:10"
						default:
							break;
					}
				}
				if($(obj).prev().hasClass("parentFormformID")){
					$(obj).prev().remove();//删除上一个同级别元素,即:删除错误提示信息
				}
				if(msg!=''){//提示信息不为空的情况
					methods.showmsg(obj,msg);//调用methods对象的showmsg方法,参数1-当前被验证的表单字段  参数2-提示信息
					return false;//返回false
				}else{
					return true;//返回true
				}
			},
			required:function(obj,val){//参数1-当前被验证的表单字段   参数2-当前表单字段的值
				if(val==''){//值为空的情况
					if($(obj).is("input")){//是否为input表单字段
                                                //参考语言包文件:"js/language/zh_en.js"
						return lang.validform.required.text+"<br>";//此处内容不可为空
					}else if($(obj).is("select")){
                                                //参考语言包文件:"js/language/zh_en.js"
						return lang.validform.required.select+"<br>";//请选择一个项目
					}else{
                                                //参考语言包文件:"js/language/zh_en.js"
						return lang.validform.required.text+"<br>";//此处内容不可为空
					}
				}
				return '';//值为非空的情况
			},
			minsize:function(val,dlen,isrequire){
				if(val==""&&!isrequire){
					return '';
				}
				var len = val.length;//长度值
				if(len<dlen){//长度值小于最小值的情况
                                        //参考语言包文件:"js/language/zh_en.js"
					return lang.validform.min.text+dlen+lang.validform.min.text1+"<br>";//最少几个字符
				}
				return '';
			},
			maxsize:function(val,dlen,isrequire){
				if(val==""&&!isrequire){
					return '';
				}
				var len = val.length;//长度值
				if(len>dlen){//长度值大于最大值的情况
                                        //参考语言包文件:"js/language/zh_en.js"
					return lang.validform.max.text+dlen+lang.validform.max.text1+"<br>";//最多几个字符
				}
				return '';
			},
			email:function(val,isrequire){
				if(val==""&&!isrequire){
					return '';
				}
				var regex = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;
				if(!regex.test(val)){//邮箱是否有效
                                        //参考语言包文件:"js/language/zh_en.js"
					return lang.validform.email.text+"<br>";//邮件地址无效
				}
				return '';
			},
			equals:function(val,equalsid){
				if(val!=$("#"+equalsid).val()){//验证密码是否相等,equalsid值为password
                                        //参考语言包文件:"js/language/zh_en.js"
					return lang.validform.equals.text+"<br>";//请输入与上面相同的密码
				}
				return '';
			},
			showmsg:function(obj,msg){//参数1-当前被验证的表单字段   参数2-错误提示信息
                                //错误提示信息
				var msgcontent = '<div  class="reqformError parentFormformID formError"><div class="formErrorContent">'+msg+'<br /></div><div class="formErrorArrow"><div class="line10"></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div>	<div class="line2"><!-- --></div><div class="line1"><!-- --></div></div></div>';
				$(obj).before(msgcontent);//在当前被验证的表单字段前输出错误提示信息
				var objprev = $(obj).prev();//检测前一个同胞元素
				objprev.css('margin-top','-'+objprev.height()+'px');//向上移
				objprev.css('margin-left',($(obj).width()-20)+'px');//向左移
				objprev.bind('click',function(){//绑定click事件
					$(this).remove();//当单击 "错误提示信息" 时删除该错误提示信息区域标签元素
				});
			}
		};//结束methods对象定义
		if(!this.is("form")){//判断是否为"form"表单,对应win.$("#formview").validform()中的formview
			alert(validform.onlyform);//只能为form表单
			return false;//返回false
		}
		form = this;//将this(即:formview表单)赋值给form
		if(type=='validall'){//验证所有
			return methods.back(form);
		}else{
			methods.init(form);//调用methods兑现的init初始化方法
		}
	};
})(jQuery);