您的位置:

首页 >

网络编程 >

浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题 >

浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题

2016-10-22 02:08:30

分类:网络编程

今天用firefox调试一个用jquery里面的封装的方法与后台交互的时候,firefox死活不弹窗。 而之前用谷歌浏览器顺利通过。之后发现各自浏览器对浏览器默认值的处理是不一样的。总结: 如果返回的是json,应该带上该参数,返回的是text也一样。 $.post(url,param,function(data),param);//最后一个参数param对应返回信息的类型,一般要带上,避免 因不同浏览器默认设置的不同造成的问题。

1.首先在项目中添加必备js与css  2.代码中添加引用(必备引用) 复制代码 代码如下: <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <!--jquery必须库--> <script src="formValidator1/formValidator-4.0.1.min.js" type="text/javascript"></script> <!--表单验证必须库--> <script src="formValidator1/formValidatorRegex.js" type="text/javascript"></script> <!--表单验证扩展库--> <link href="formValidator1/style/validator.css" rel="stylesheet" type="text/css" /><!--表单验证样式表--> 3.<body>中要验证的标签(做一些常用的演示) 复制代码 代码如下: <table border="0px" style="font-size:12px"> <tr> <td colpan="3"><input type="submit" name="button" id="button" value="提交" /></td> </tr> <tr> <td align="right">身份证(正则表达式库):</td> <td><input name="sfz" type="text" id="sfz" /></td> <td><div id="sfzTip" style="width:300px"></div></td> <!--必须注意这里提示验证信息中的div的id值,跟要验证控件中的id值多了一个Tip,下面的都是这样。必须多的是Tip,也必须要多。--> </tr> <tr> <td align="right">身份证(外部函数):</td> <td><input type="text" id="sfz1" style="width:120px" /></td> <td><div id="sfz1Tip" style="width:300px"></div></td> </tr> <tr> <td align="right">整数:</td> <td><input type="text" id="zs" style="width:120px" /></td> <td><div id="zsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">正整数:</td> <td><input type="text" id="zzs" style="width:120px" /></td> <td><div id="zzsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">负整数:</td> <td><input type="text" id="fzs" style="width:120px" /></td> <td><div id="fzsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">数字:</td> <td><input type="text" id="sz" style="width:120px" /></td> <td><div id="szTip" style="width:300px"></div></td> </tr> <tr> <td align="right">正数(正整数 + 0):</td> <td><input type="text" id="zs1" style="width:120px" /></td> <td><div id="zs1Tip" style="width:300px"></div></td> </tr> <tr> <td align="right">负数(负整数 + 0):</td> <td><input type="text" id="fs" style="width:120px" /></td> <td><div id="fsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">浮点数:</td> <td><input type="text" id="fds" style="width:120px" /></td> <td><div id="fdsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">正浮点数:</td> <td><input type="text" id="zfds" style="width:120px" /></td> <td><div id="zfdsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">负浮点数:</td> <td><input type="text" id="ffds" style="width:120px" /></td> <td><div id="ffdsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">非负浮点数(正浮点数 + 0):</td> <td><input type="text" id="fffds" style="width:120px" /></td> <td><div id="fffdsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">非正浮点数(负浮点数 + 0):</td> <td><input type="text" id="fzfds" style="width:120px" /></td> <td><div id="fzfdsTip" style="width:300px"></div></td> </tr> <tr> <td align="right">颜色:</td> <td><input type="text" id="ys" style="width:120px" /></td> <td><div id="ysTip" style="width:300px"></div></td> </tr> <tr> <td align="right">你的EMAIL:</td> <td><input type="text" id="email" style="width:120px" /></td> <td><div id="emailTip" style="width:300px"></div></td> </tr> <tr> <td align="right">手机:</td> <td><input type="text" id="sj" style="width:120px" /></td> <td><div id="sjTip" style="width:300px"></div></td> </tr> <tr> <td align="right">邮编:</td> <td><input type="text" id="yb" style="width:120px" /></td> <td><div id="ybTip" style="width:300px"></div></td> </tr> <tr> <td align="right">非空:</td> <td><input type="text" id="fk" style="width:120px" /></td> <td><div id="fkTip" style="width:300px"></div></td> </tr> <tr> <td align="right">图片:</td> <td><input type="text" id="tp" style="width:120px" /></td> <td><div id="tpTip" style="width:300px"></div></td> </tr> <tr> <td align="right">压缩文件:</td> <td><input type="text" id="rar" style="width:120px" /></td> <td><div id="rarTip" style="width:300px"></div></td> </tr> <tr> <td align="right">ip4:</td> <td><input type="text" id="ip4" style="width:120px" /></td> <td><div id="ip4Tip" style="width:300px"></div></td> </tr> <tr> <td align="right">QQ号码:</td> <td><input type="text" id="qq" style="width:120px" /></td> <td><div id="qqTip" style="width:300px"></div></td> </tr> <tr> <td align="right">国内电话:</td> <td><input type="text" id="dh" style="width:120px" /></td> <td><div id="dhTip" style="width:300px"></div></td> </tr> <tr> <td align="right">用户名:</td> <td><input type="text" id="yhm" style="width:120px" /></td> <td><div id="yhmTip" style="width:300px"></div></td> </tr> <tr> <td align="right">字母:</td> <td><input type="text" id="zm" style="width:120px" /></td> <td><div id="zmTip" style="width:300px"></div></td> </tr> <tr> <td align="right">大写字母:</td> <td><input type="text" id="dxzm" style="width:120px" /></td> <td><div id="dxzmTip" style="width:300px"></div></td> </tr> <tr> <td align="right">小写字母:</td> <td><input type="text" id="xxzm" style="width:120px" /></td> <td><div id="xxzmTip" style="width:300px"></div></td> </tr> <tr> <td align="right">身份证:</td> <td><input type="text" id="sfz" style="width:120px" /></td> <td><div id="sfzTip" style="width:300px"></div></td> </tr> </table> 4.<script>中的代码 复制代码 代码如下: <script type="text/javascript"> $(document).ready(function () { $.formValidator.initConfig({ formID: "form1", onError: function () { alert("校验没有通过,具体错误请看错误提示") } }); $("#sfz").formValidator({ onShow: "请输入15或18位的身份证", onfocus: "输入15或18位的身份证", onCorrect: "输入正确" }).regexValidator({ regExp: "idcard", dataType: "enum", onError: "你输入的身份证格式不正确" }); ; $("#sfz1").formValidator({ onShow: "请输入15或18位的身份证", onfocus: "输入15或18位的身份证", onCorrect: "输入正确" }).functionValidator({ fun: isCardID }); $("#zs").formValidator({ onShow: "请输入整数", onCorrect: "谢谢你的合作,你的整数正确" }).regexValidator({ regExp: "intege", dataType: "enum", onError: "整数格式不正确" }); $("#zzs").formValidator({ onShow: "请输入正整数", onCorrect: "谢谢你的合作,你的正整数正确" }).regexValidator({ regExp: "intege1", dataType: "enum", onError: "正整数格式不正确" }); $("#fzs").formValidator({ onShow: "请输入负整数", onCorrect: "谢谢你的合作,你的负整数正确" }).regexValidator({ regExp: "intege2", dataType: "enum", onError: "负整数格式不正确" }); $("#sz").formValidator({ onShow: "请输入数字", onCorrect: "谢谢你的合作,你的数字正确" }).regexValidator({ regExp: "num", dataType: "enum", onError: "数字格式不正确" }); $("#zs1").formValidator({ onShow: "请输入正数", onCorrect: "谢谢你的合作,你的正数正确" }).regexValidator({ regExp: "num1", dataType: "enum", onError: "正数格式不正确" }); $("#fs").formValidator({ onShow: "请输入负数", onCorrect: "谢谢你的合作,你的负数正确" }).regexValidator({ regExp: "num2", dataType: "enum", onError: "负数格式不正确" }); $("#sj").formValidator({ onShow: "请输入你的手机号码", onfocus: "必须是13或15打头哦", onCorrect: "谢谢你的合作,你的手机号码正确" }).regexValidator({ regExp: "mobile", dataType: "enum", onError: "手机号码格式不正确" }); //$("#").formValidator({onShow:"",onfocus:"请输入",onCorrect:"谢谢你的合作,你的正确"}).regexValidator({regExp:"",dataType:"enum",onError:"格式不正确"}); $("#email").formValidator({ onShow: "请输入你的email", onfocus: "请注意你输入的email格式,例如:[email protected]", onCorrect: "谢谢你的合作,你的email正确" }).regexValidator({ regExp: "email", dataType: "enum", onError: "email格式不正确" }); $("#fds").formValidator({ onShow: "请输入浮点数", onCorrect: "谢谢你的合作,你的浮点数正确" }).regexValidator({ regExp: "decmal", dataType: "enum", onError: "浮点数格式不正确" }); $("#zfds").formValidator({ onShow: "请输入正浮点数", onCorrect: "谢谢你的合作,你的正浮点数正确" }).regexValidator({ regExp: "decmal1", dataType: "enum", onError: "正浮点数格式不正确" }); $("#ffds").formValidator({ onShow: "请输入负浮点数", onCorrect: "谢谢你的合作,你的负浮点数正确" }).regexValidator({ regExp: "decmal2", dataType: "enum", onError: "负浮点数格式不正确" }); $("#fffds").formValidator({ onShow: "请输入非负浮点数", onCorrect: "谢谢你的合作,你的非负浮点数正确" }).regexValidator({ regExp: "decmal4", dataType: "enum", onError: "非负浮点数格式不正确" }); $("#fzfds").formValidator({ onShow: "请输入非正浮点数", onCorrect: "谢谢你的合作,你的非正浮点数正确" }).regexValidator({ regExp: "decmal5", dataType: "enum", onError: "非正浮点数格式不正确" }); $("#ys").formValidator({ onShow: "请输入16进制颜色", onCorrect: "谢谢你的合作,你的16进制颜色正确" }).regexValidator({ regExp: "color", dataType: "enum", onError: "16进制颜色格式不正确" }); $("#yb").formValidator({ onShow: "请输入邮编", onfocus: "6位数字组成的哦", onCorrect: "谢谢你的合作,你的邮编正确" }).regexValidator({ regExp: "zipcode", dataType: "enum", onError: "邮编格式不正确" }); $("#ip4").formValidator({ onShow: "请输入ip4", onfocus: "例如:172.16.201.18", onCorrect: "谢谢你的合作,你的ip4正确" }).regexValidator({ regExp: "ip4", dataType: "enum", onError: "ip4格式不正确" }); $("#fk").formValidator({ onShow: "请输入非空字符", onCorrect: "谢谢你的合作,你的非空字符正确" }).regexValidator({ regExp: "notempty", dataType: "enum", onError: "非空字符格式不正确" }); $("#tp").formValidator({ onShow: "请输入图片名", onCorrect: "谢谢你的合作,你的图片名正确" }).regexValidator({ regExp: "picture", dataType: "enum", onError: "图片名格式不正确" }); $("#rar").formValidator({ onShow: "请输入压缩文件名", onCorrect: "谢谢你的合作,你的压缩文件名正确" }).regexValidator({ regExp: "rar", dataType: "enum", onError: "压缩文件名格式不正确" }); $("#qq").formValidator({ onShow: "请输入QQ号码", onCorrect: "谢谢你的合作,你的QQ号码正确" }).regexValidator({ regExp: "qq", dataType: "enum", onError: "QQ号码格式不正确" }); $("#dh").formValidator({ onShow: "请输入国内电话", onfocus: "例如:0577-88888888或省略区号88888888", onCorrect: "谢谢你的合作,你的国内电话正确" }).regexValidator({ regExp: "tel", dataType: "enum", onError: "国内电话格式不正确" }); $("#yhm").formValidator({ onShow: "请输入用户名", onCorrect: "谢谢你的合作,你的用户名正确" }).regexValidator({ regExp: "username", dataType: "enum", onError: "用户名格式不正确" }); $("#zm").formValidator({ onShow: "请输入字母", onCorrect: "谢谢你的合作,你的字母正确" }).regexValidator({ regExp: "letter", dataType: "enum", onError: "字母格式不正确" }); $("#dxzm").formValidator({ onShow: "请输入大写字母", onCorrect: "谢谢你的合作,你的大写字母正确" }).regexValidator({ regExp: "letter_u", dataType: "enum", onError: "大写字母格式不正确" }); $("#xxzm").formValidator({ onShow: "请输入小写字母", onCorrect: "谢谢你的合作,你的小写字母正确" }).regexValidator({ regExp: "letter_l", dataType: "enum", onError: "小写字母格式不正确" }); $("#sfz").formValidator({ onShow: "请输入身份证", onCorrect: "谢谢你的合作,你的身份证正确" }).regexValidator({ regExp: "idcard", dataType: "enum", onError: "身份证格式不正确" }); }); </script> 5.效果图:  6.<script>中函数参数说明: formValidator:用来做初始化的类型,必须先执行。("√"为showalert可用参数)属性属性名称默认值showalert详细解释validatorgroup校验组"1"√一个页面的控件可以分成多个组,分开校验empty是否可以为空false√ automodify输入错误离开焦点的时候,自动修复错误true√先给出提示然后,自动修复,目前只支持text、file、textarea三种类型onempty空时候的提示"输入内容为空" 可以为空,为空时候的提示。为空者不显示onshow显示时候的提示"请输入内容" 为空者不显示onfocus获得焦点的提示"请输入内容" 为空者不显示oncorrect输入正确后的提示"输入正确" 当你焦点离开控件的时候,如果输入正确将出现该提示。为空者不显示tipid显示错误的容器ID表单ID+"Tip" 如果不自动构建提示层,表示提示成的ID号如果自动构建提示层,表示提示层相对的目标控件tipcss自动构建的提示层的样式"left":"10px","top":"1px","height":"20px","width":"250px" 主要用于定位自动构建的提示层forcevalid强制输入的值必须有效true√是否把一个全角字符当做2个长度的参数ajax提交服务器true√ajaxValidator是否把该表单提交给服务器defaultvalue默认值null√所有input和select表单。如果你不设置就保持原值,一旦设置就设为默认值。triggerevent默认值blur√当前支持2种属性值:blur:失去焦点的时候触发change:当输入框里的值发生改变的时候触发    inputValidator: 属性属性名称默认值详细解释type比较类型"size"(对select无效)"size":表示比较长度 ,默认值"number":数值型比较"string":字符型比较"date":短日期类型"datetime":长日期类型min最小长度/值0默认数值型。如果进行字符比较,请收入字符型对select-one而言inputValidator里的参数min和max表示选择的索引号范围 对select-multiple而言inputValidator里的参数min和max表示选择的个数max最大长度/值99999999999同上onerror发生错误的提示"输入错误"为空者不显示。onerrormin比min属性小的提示null当用户输入的值比min属性小的时候的错误提示onerrormax比max属性大的提示null当用户输入的值比max属性大的时候的错误提示empty控件文本值是否允许两边为空两边都允许出现空默认值{leftempty:true,rightempty:true,emptyerror:null}leftempty:表示左边是否允许为空rightempty:表示右边是否允许为空 emptyerror:出现该错误的时候的提示,如果为null,则利用onerror属性来提示错误。    compareValidator: 属性属性名称默认值详细解释desid要比较控件的ID""要跟源目标进行比较的目标IDoperateor比较符号"="一共有如下几种类型:=、!=、>、>=、<、<=datatype数据类型"string"目前只支持2种:"string"、"number","datetime","date"onerror发生错误的提示"输入错误"为空者不显示。    regexValidator: 属性属性名称默认值详细解释regexp正则表达式或表达式数组""采用的是显式构造函数new RegExp("pattern"[,"flags"]); 由于Javascript 中'\' 被用作转义字符,所以在使用显示构造函数构造实例对象的时候,需要使用'\\' 代替'\' param附加参数"i"g:代表可以进行全局匹配。i:代表不区分大小写匹配。m:代表可以进行多行匹配。可以任意组合,当然也可以不加参数 comparetype比较类型"||""||"或的关系   "&&"并列datatype数据类型"string""string":自己写的表达式,"enum":枚举名。具体请见demo3.htm你可以自己修改、添加formValidatorRegex.js里的枚举项目名和表达式。onerror:发生错误的提示"输入错误"为空者不显示。    ajaxValidator:几乎所有的属性跟$.ajax()的属性一样,请参考$.ajax()函数的帮助属性属性名称默认值详细解释type请求的类型"GET""POST" 或 "GET"url发送到的URL地址""在服务器端,你可以通过name为clientid获取触发验证的控件ID名datatype返回的数据类型"html"xml、html、script、json、texttimeout超时设置999 data数据"" async是否以异步的方式发送true success当请求成功时调用的函数null processdata自动处理返回的数据为字符串true在默认的情况下,如果data选项传进的数据是一个对象而不是字符串,将会自动地被处理和转换成一个查询字符串complete当请求完成时调用的函数null beforesend当请求前时调用的函数null有个一个参数,根$.ajax里的beforeSend参数一样。buttons你点提交的按钮(组)jQuery对象null当你触发了ajax校验,buttons里对应的按钮(组)就会灰掉,一直等待服务器返回数据为止error当请求失败时调用的函数"请求失败"你可以自己定义这个错误,在error里自动打出。为空者不显示。 functionValidator属性属性名称默认值返回值的解释fun外部函数名()参数1:元素的值,参数2:元素对象默认当作处理过程true/false校验成功/失败字符串校验失败,返回值当作自定义错误无处理过程onerror发生错误的提示"输入错误"函数return false的时候,显示该错误信息  公共函数:主要是设置全局参数和判断是否通过校验函数名函数说明$.formValidator.initConfig参数:配置类型 属性默认值说明validatorgroup"1"你要针对哪个组进行配置formid""要自动注册pageIsValid函数的表单ID号alertmessagefalse是否弹出窗口autotipfalse是否自动构建提示层errorfocustrue发生错误的时候,第一个出错控件是否获得焦点forcevalidtrue是否一直输入正确为止才允许离开焦点widewordtrue是否把一个全角字符当做2个长度onsuccessnull该组校验通过后的回调函数,返回false,阻止表单的提交submitoncefalse校验通过后,是否灰掉所有的提交按钮onerrornull该组校验失败后的回调函数, 有两个参数 参数1一个校验没有通过的错误信息参数2一个校验没有通过的元素对象参数3所有的错误信息数组,你可以通过$.map来遍历debugfalse是否处于调试模式。true:不提交表单$.formValidator.pageIsValid一个参数: 不是配置类型 validatorgroup"1"你要针对哪个组进行验证$.formValidator.isOneValid一个参数: 当时设置验证的表单元素ID。返回是否校验成功的信息。 $.formValidator.setFailStatefunction("tipid","显示的信息")在showword模式下,如果你的额外校验没有通过,你可以通过它来设置成失败信息和状态 $.formValidator.getLengthfunction("表单元素id")checkbox或radiobutton表示(同组)选择的个数。对select-one,选择索引的值对select-multiple,inputValidator里的参数min和max表示选择的个数其它input表示的表示字符长度。 $.formValidator.retSetTipStatefunction(校验组号) 来把该组的提示内容恢复到onshow状态$.formValidator.reloadAutoTip重新定位自动构建的提示层formValidator:用来做初始化的类型,必须先执行。("√"为showalert可用参数)属性属性名称默认值showalert详细解释validatorgroup校验组"1"√一个页面的控件可以分成多个组,分开校验empty是否可以为空false√ automodify输入错误离开焦点的时候,自动修复错误true√先给出提示然后,自动修复,目前只支持text、file、textarea三种类型onempty空时候的提示"输入内容为空" 可以为空,为空时候的提示。为空者不显示onshow显示时候的提示"请输入内容" 为空者不显示onfocus获得焦点的提示"请输入内容" 为空者不显示oncorrect输入正确后的提示"输入正确" 当你焦点离开控件的时候,如果输入正确将出现该提示。为空者不显示tipid显示错误的容器ID表单ID+"Tip" 如果不自动构建提示层,表示提示成的ID号如果自动构建提示层,表示提示层相对的目标控件tipcss自动构建的提示层的样式"left":"10px","top":"1px","height":"20px","width":"250px" 主要用于定位自动构建的提示层forcevalid强制输入的值必须有效true√是否把一个全角字符当做2个长度的参数ajax提交服务器true√ajaxValidator是否把该表单提交给服务器defaultvalue默认值null√所有input和select表单。如果你不设置就保持原值,一旦设置就设为默认值。triggerevent默认值blur√当前支持2种属性值:blur:失去焦点的时候触发change:当输入框里的值发生改变的时候触发    inputValidator: 属性属性名称默认值详细解释type比较类型"size"(对select无效)"size":表示比较长度 ,默认值"number":数值型比较"string":字符型比较"date":短日期类型"datetime":长日期类型min最小长度/值0默认数值型。如果进行字符比较,请收入字符型对select-one而言inputValidator里的参数min和max表示选择的索引号范围 对select-multiple而言inputValidator里的参数min和max表示选择的个数max最大长度/值99999999999同上onerror发生错误的提示"输入错误"为空者不显示。onerrormin比min属性小的提示null当用户输入的值比min属性小的时候的错误提示onerrormax比max属性大的提示null当用户输入的值比max属性大的时候的错误提示empty控件文本值是否允许两边为空两边都允许出现空默认值{leftempty:true,rightempty:true,emptyerror:null}leftempty:表示左边是否允许为空rightempty:表示右边是否允许为空 emptyerror:出现该错误的时候的提示,如果为null,则利用onerror属性来提示错误。    compareValidator: 属性属性名称默认值详细解释desid要比较控件的ID""要跟源目标进行比较的目标IDoperateor比较符号"="一共有如下几种类型:=、!=、>、>=、<、<=datatype数据类型"string"目前只支持2种:"string"、"number","datetime","date"onerror发生错误的提示"输入错误"为空者不显示。    regexValidator: 属性属性名称默认值详细解释regexp正则表达式或表达式数组""采用的是显式构造函数new RegExp("pattern"[,"flags"]); 由于Javascript 中'\' 被用作转义字符,所以在使用显示构造函数构造实例对象的时候,需要使用'\\' 代替'\' param附加参数"i"g:代表可以进行全局匹配。i:代表不区分大小写匹配。m:代表可以进行多行匹配。可以任意组合,当然也可以不加参数 comparetype比较类型"||""||"或的关系   "&&"并列datatype数据类型"string""string":自己写的表达式,"enum":枚举名。具体请见demo3.htm你可以自己修改、添加formValidatorRegex.js里的枚举项目名和表达式。onerror:发生错误的提示"输入错误"为空者不显示。    ajaxValidator:几乎所有的属性跟$.ajax()的属性一样,请参考$.ajax()函数的帮助属性属性名称默认值详细解释type请求的类型"GET""POST" 或 "GET"url发送到的URL地址""在服务器端,你可以通过name为clientid获取触发验证的控件ID名datatype返回的数据类型"html"xml、html、script、json、texttimeout超时设置999 data数据"" async是否以异步的方式发送true success当请求成功时调用的函数null processdata自动处理返回的数据为字符串true在默认的情况下,如果data选项传进的数据是一个对象而不是字符串,将会自动地被处理和转换成一个查询字符串complete当请求完成时调用的函数null beforesend当请求前时调用的函数null有个一个参数,根$.ajax里的beforeSend参数一样。buttons你点提交的按钮(组)jQuery对象null当你触发了ajax校验,buttons里对应的按钮(组)就会灰掉,一直等待服务器返回数据为止error当请求失败时调用的函数"请求失败"你可以自己定义这个错误,在error里自动打出。为空者不显示。 functionValidator属性属性名称默认值返回值的解释fun外部函数名()参数1:元素的值,参数2:元素对象默认当作处理过程true/false校验成功/失败字符串校验失败,返回值当作自定义错误无处理过程onerror发生错误的提示"输入错误"函数return false的时候,显示该错误信息  公共函数:主要是设置全局参数和判断是否通过校验函数名函数说明$.formValidator.initConfig参数:配置类型 属性默认值说明validatorgroup"1"你要针对哪个组进行配置formid""要自动注册pageIsValid函数的表单ID号alertmessagefalse是否弹出窗口autotipfalse是否自动构建提示层errorfocustrue发生错误的时候,第一个出错控件是否获得焦点forcevalidtrue是否一直输入正确为止才允许离开焦点widewordtrue是否把一个全角字符当做2个长度onsuccessnull该组校验通过后的回调函数,返回false,阻止表单的提交submitoncefalse校验通过后,是否灰掉所有的提交按钮onerrornull该组校验失败后的回调函数, 有两个参数 参数1一个校验没有通过的错误信息参数2一个校验没有通过的元素对象参数3所有的错误信息数组,你可以通过$.map来遍历debugfalse是否处于调试模式。true:不提交表单$.formValidator.pageIsValid一个参数: 不是配置类型 validatorgroup"1"你要针对哪个组进行验证$.formValidator.isOneValid一个参数: 当时设置验证的表单元素ID。返回是否校验成功的信息。 $.formValidator.setFailStatefunction("tipid","显示的信息")在showword模式下,如果你的额外校验没有通过,你可以通过它来设置成失败信息和状态 $.formValidator.getLengthfunction("表单元素id")checkbox或radiobutton表示(同组)选择的个数。对select-one,选择索引的值对select-multiple,inputValidator里的参数min和max表示选择的个数其它input表示的表示字符长度。 $.formValidator.retSetTipStatefunction(校验组号) 来把该组的提示内容恢复到onshow状态$.formValidator.reloadAutoTip重新定位自动构建的提示层formValidator:用来做初始化的类型,必须先执行。("√"为showalert可用参数)属性属性名称默认值showalert详细解释validatorgroup校验组"1"√一个页面的控件可以分成多个组,分开校验empty是否可以为空false√ automodify输入错误离开焦点的时候,自动修复错误true√先给出提示然后,自动修复,目前只支持text、file、textarea三种类型onempty空时候的提示"输入内容为空" 可以为空,为空时候的提示。为空者不显示onshow显示时候的提示"请输入内容" 为空者不显示onfocus获得焦点的提示"请输入内容" 为空者不显示oncorrect输入正确后的提示"输入正确" 当你焦点离开控件的时候,如果输入正确将出现该提示。为空者不显示tipid显示错误的容器ID表单ID+"Tip" 如果不自动构建提示层,表示提示成的ID号如果自动构建提示层,表示提示层相对的目标控件tipcss自动构建的提示层的样式"left":"10px","top":"1px","height":"20px","width":"250px" 主要用于定位自动构建的提示层forcevalid强制输入的值必须有效true√是否把一个全角字符当做2个长度的参数ajax提交服务器true√ajaxValidator是否把该表单提交给服务器defaultvalue默认值null√所有input和select表单。如果你不设置就保持原值,一旦设置就设为默认值。triggerevent默认值blur√当前支持2种属性值:blur:失去焦点的时候触发change:当输入框里的值发生改变的时候触发    inputValidator: 属性属性名称默认值详细解释type比较类型"size"(对select无效)"size":表示比较长度 ,默认值"number":数值型比较"string":字符型比较"date":短日期类型"datetime":长日期类型min最小长度/值0默认数值型。如果进行字符比较,请收入字符型对select-one而言inputValidator里的参数min和max表示选择的索引号范围 对select-multiple而言inputValidator里的参数min和max表示选择的个数max最大长度/值99999999999同上onerror发生错误的提示"输入错误"为空者不显示。onerrormin比min属性小的提示null当用户输入的值比min属性小的时候的错误提示onerrormax比max属性大的提示null当用户输入的值比max属性大的时候的错误提示empty控件文本值是否允许两边为空两边都允许出现空默认值{leftempty:true,rightempty:true,emptyerror:null}leftempty:表示左边是否允许为空rightempty:表示右边是否允许为空 emptyerror:出现该错误的时候的提示,如果为null,则利用onerror属性来提示错误。    compareValidator: 属性属性名称默认值详细解释desid要比较控件的ID""要跟源目标进行比较的目标IDoperateor比较符号"="一共有如下几种类型:=、!=、>、>=、<、<=datatype数据类型"string"目前只支持2种:"string"、"number","datetime","date"onerror发生错误的提示"输入错误"为空者不显示。    regexValidator: 属性属性名称默认值详细解释regexp正则表达式或表达式数组""采用的是显式构造函数new RegExp("pattern"[,"flags"]); 由于Javascript 中'\' 被用作转义字符,所以在使用显示构造函数构造实例对象的时候,需要使用'\\' 代替'\' param附加参数"i"g:代表可以进行全局匹配。i:代表不区分大小写匹配。m:代表可以进行多行匹配。可以任意组合,当然也可以不加参数 comparetype比较类型"||""||"或的关系   "&&"并列datatype数据类型"string""string":自己写的表达式,"enum":枚举名。具体请见demo3.htm你可以自己修改、添加formValidatorRegex.js里的枚举项目名和表达式。onerror:发生错误的提示"输入错误"为空者不显示。    ajaxValidator:几乎所有的属性跟$.ajax()的属性一样,请参考$.ajax()函数的帮助属性属性名称默认值详细解释type请求的类型"GET""POST" 或 "GET"url发送到的URL地址""在服务器端,你可以通过name为clientid获取触发验证的控件ID名datatype返回的数据类型"html"xml、html、script、json、texttimeout超时设置999 data数据"" async是否以异步的方式发送true success当请求成功时调用的函数null processdata自动处理返回的数据为字符串true在默认的情况下,如果data选项传进的数据是一个对象而不是字符串,将会自动地被处理和转换成一个查询字符串complete当请求完成时调用的函数null beforesend当请求前时调用的函数null有个一个参数,根$.ajax里的beforeSend参数一样。buttons你点提交的按钮(组)jQuery对象null当你触发了ajax校验,buttons里对应的按钮(组)就会灰掉,一直等待服务器返回数据为止error当请求失败时调用的函数"请求失败"你可以自己定义这个错误,在error里自动打出。为空者不显示。 functionValidator属性属性名称默认值返回值的解释fun外部函数名()参数1:元素的值,参数2:元素对象默认当作处理过程true/false校验成功/失败字符串校验失败,返回值当作自定义错误无处理过程onerror发生错误的提示"输入错误"函数return false的时候,显示该错误信息  公共函数:主要是设置全局参数和判断是否通过校验函数名函数说明$.formValidator.initConfig参数:配置类型 属性默认值说明validatorgroup"1"你要针对哪个组进行配置formid""要自动注册pageIsValid函数的表单ID号alertmessagefalse是否弹出窗口autotipfalse是否自动构建提示层errorfocustrue发生错误的时候,第一个出错控件是否获得焦点forcevalidtrue是否一直输入正确为止才允许离开焦点widewordtrue是否把一个全角字符当做2个长度onsuccessnull该组校验通过后的回调函数,返回false,阻止表单的提交submitoncefalse校验通过后,是否灰掉所有的提交按钮onerrornull该组校验失败后的回调函数, 有两个参数 参数1一个校验没有通过的错误信息参数2一个校验没有通过的元素对象参数3所有的错误信息数组,你可以通过$.map来遍历debugfalse是否处于调试模式。true:不提交表单$.formValidator.pageIsValid一个参数: 不是配置类型 validatorgroup"1"你要针对哪个组进行验证$.formValidator.isOneValid一个参数: 当时设置验证的表单元素ID。返回是否校验成功的信息。 $.formValidator.setFailStatefunction("tipid","显示的信息")在showword模式下,如果你的额外校验没有通过,你可以通过它来设置成失败信息和状态 $.formValidator.getLengthfunction("表单元素id")checkbox或radiobutton表示(同组)选择的个数。对select-one,选择索引的值对select-multiple,inputValidator里的参数min和max表示选择的个数其它input表示的表示字符长度。 $.formValidator.retSetTipStatefunction(校验组号) 来把该组的提示内容恢复到onshow状态$.formValidator.reloadAutoTip重新定位自动构建的提示层6.添加修改说明: 复制代码 代码如下: $.formValidator.reloadAutoTip(); //重新加载表单验证样式 if(!$.formValidator.pageIsValid('1')) return false; //如果不通过则不提交 复制代码 代码如下: $(document).ready(function () { $.formValidator.initConfig({ formID: "form1", onError: function () { alert("校验没有通过,具体错误请看错误提示") } }); $("#name").formValidator({ onShow: "请输入姓名!", onFocus: "输入一个到十个字符", onCorrect: "输入正确,谢谢您的合作!" }).inputValidator({ min: 1, max: 20, onError: "输入长度,不对!" }); $("#timelong").formValidator({ onShow: "请输入路演时长!", onFocus: "输入格式为正整数!", onCorrect: "输入正确,谢谢您的合作!" }).regexValidator({ regExp:"intege1",dataType: "enum", onError: "您输入的时长格式不正确!" }); $("#address").formValidator({ onShow: "请输入路演平台名称!", onFocus: "输入一个到五十个字符", onCorrect: "输入正确,谢谢您的合作!" }).inputValidator({ min: 1, max: 50, onError: "输入长度,不对!" }); $("#urladdress").formValidator({ onShow: "请输入路演链接地址!", onFocus: "输入格式:http://www.baidu.com", onCorrect: "输入正确,谢谢您的合作!" }).regexValidator({ regExp:"^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$", onError: "输入格式不正确!" }); $("#time").formValidator({ onCorrect: "格式正确" }).functionValidator({fun:isDateTime, onError: "输入格式,不对!" }); $("#txtcontent").formValidator({ onShow: "请输入专家简介!", onFocus: "输入一个到一百个字符", onCorrect: "输入正确,谢谢您的合作!" }).inputValidator({ min: 1, max: 100, onError: "输入长度,不对!

构造函数、原型实现继承的缺陷首先来分析构造函数和原型链两种实现继承方式的缺陷:构造函数(对象冒充)的主要问题是必须使用构造函数方式,且无法继承通过原型定义的方法,这不是最好的选择。不过如果使用原型链,就无法使用带参数的构造函数了。开发者如何选择呢?答案很简单,两者都用。构造函数+原型混合方式这种继承方式使用构造函数定义类,并非使用任何原型。创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。用这两种方式重写前面的例子,代码如下:复制代码 代码如下:function ClassA(sColor) {    this.color = sColor;}ClassA.prototype.sayColor = function () {    alert(this.color);};function ClassB(sColor, sName) {    ClassA.call(this, sColor);    this.name = sName;}ClassB.prototype = new ClassA();ClassB.prototype.sayName = function () {    alert(this.name);};在此例子中,继承机制由两行突出显示的蓝色代码实现。在第一行突出显示的代码中,在 ClassB 构造函数中,用对象冒充继承 ClassA 类的 sColor 属性。在第二行突出显示的代码中,用原型链继承 ClassA 类的方法。由于这种混合方式使用了原型链,所以 instanceof 运算符仍能正确运行。下面的例子测试了这段代码:复制代码 代码如下:var objA = new ClassA("blue");var objB = new ClassB("red",

querySelector和querySelectorAll是W3C提供的新的查询接口querySelector和querySelectorAll是W3C提供的 新的查询接口,其主要特点如下:1、querySelector只返回匹配的第一个元素,如果没有匹配项,返回null。 2、querySelectorAll返回匹配的元素集合,如果没有匹配项,返回空的nodelist(节点数组)。 3、返回的结果是静态的,之后对document结构的改变不会影响到之前取到的结果。这两个方法都可以接受三种类型的参数:id(#),class(.),标签,很像jquery的选择器。var obj = document.querySelector("#id");var obj = document.querySelector(".classname");var obj = document.querySelector("div");var el = document.body.querySelector("style[type='text/css'], style:not([type])");var elements = document.querySelectorAll("#score>tbody>tr>td:nth-of-type(2)");var elements = document.querySelectorAll("#id1, #id2, .class1, class2, div a, #list li img");目前IE8+,ff,chrome都支持此api(IE8中的selector string只支持css2.1的)浏览器支持查看module dom { [Supplemental, NoInterfaceObject] interface NodeSelector { Element querySelector(in DOMString selectors); NodeList querySelectorAll(in DOMString selectors); }; Document implements NodeSelector; DocumentFragment implements NodeSelector; Element implements NodeSelector; }; Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit) Basic support 1 3.5 (1.9.1) bug 416317 9 8 (CSS2 selectors only) 10 3.2 (525.3) WebKit bug 16587 Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Basic support 2.1 yes 9 10.0 3.2 从接口定义可以看到Document、DocumentFragment、Element都实现了NodeSelector接口。即这三种类型的元素都拥有者两个方法。querySelector和querySelectorAll的参数须是符合 css selector 的字符串。不同的是querySelector返回的是一个对象,querySelectorAll返回的一个集合(NodeList)。 目前 IE8/9及Firefox/Chrome/Safari/Opera 的最新版已经支持它们。 如想获取页面class属性为"red"的元素,除了使用document.getElementsByClassName('red')还可以使用document.querySelector('.red')和document.querySelectorAll('.red')。 但Element.querySelector和Element.querySelectorAll的实现有错误,如下<div id="d1"> <p><a href="http://www.sina.com.cn">SINA</a></p> </div> <script type="text/javascript"> function $(id){return document.getElementById(id);} var d1 = $('d1'); var obj1 = d1.querySelector('div a'); var obj2 = d1.querySelectorAll('div a'); alert(obj1); // -> http://www.sina.com.cn/ alert(obj2.length); // -> 1 </script> 如果支持这两个方法的浏览器可以看到分别弹出了“http://www.sina.com.cn/”,和 “1”。说明查询到了想要的元素或元素集合。这与W3C的定义却是不合的,根据定义应该是在元素d1范围内查找"div a",而d1内压根没有div。因此应该分别返回null,空集合。 jQuery1.4.2 及之前版本中只使用了document.querySelectorAll,没有使用Element.querySelectorAll。 jQuery1.4.3 后使用了Element.querySelectorAll,但做了修复。在选择器前加了"#__sizzle__"以强制其在指定元素内查找(3903-3918行)。简化下 function $(id){return document.getElementById(id);} var d1 = $('d1'); var obj1 = d1.querySelector('div a'); var obj2 = d1.querySelectorAll('div a'); var old = d1.id, id = d1.id = "__sizzle__"; try { var query = '#' + id + ' div a'; alert(d1.querySelector( query )); alert(d1.querySelectorAll( query ).length); } catch(e) { } finally { old ? d1.id = old : d1.removeAttribute( "id" ); } 实现很巧妙,指定范围的元素如果有id,将其保留在old,"__sizzle__"赋值其作为临时id,在选择器"div a"前指定查找范围为"#__sizzle__",即d1。finally语句来最后清理,如果指定范围的元素本身有id将其恢复为old,没有则去掉临时的id属性"__sizzle__"。 相关: http://msdn.microsoft.com/en-us/library/cc288169%28v=VS.85%29.aspx http://msdn.microsoft.com/en-us/library/cc304115%28VS.85%29.aspx https://developer.mozilla.org/En/DOM/Document.querySelector https://developer.mozilla.org/En/DOM/Document.querySelectorAll https://developer.mozilla.org/En/DOM/element.querySelector https:

大家可以使用windows.onload事件,但onload在看来,就是页面上的东西(img,iframe等资源)全部都加载完毕后才能发生,如果页面内有大的图片的话,会在页面展现后好久时间后才执行。如果只需要对DOM进行操作,那么这时就没必要等到页面全部加载了。我们需要更快的方法。Firefox有DOMContentLoaded事件可以轻松解决,可惜的就是IE没有。MSDN关于JSCRIPT的一个方法有段不起眼的话,当页面DOM未加载完成时,调用doScroll方法时,会产生异常。那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了。所以 对于Mozilla & Opera 浏览器,在dom树载入后有现成的 DOMContentLoaded 事件。对于Safari 浏览器,有document.onreadystatechange事件,当该触发时,如果 document.readyState=complete时,可视为dom树已经载入。对于ie,当在iframe内时,同样有document.onreadystatechange事件,对于ie在非iframe内时,只有不断地通过能否执行doScroll判断dom是否加载完毕。在本例中每间隔5毫秒尝试去执行 document.documentElement.doScroll('left')。在ie8下,貌视非iframe窗口也会有document.onreadystatechange事件,另外你也可以在构建自己的框架时使用此函数。复制代码 代码如下:(function(){ var isReady=false; //判断onDOMReady方法是否已经被执行过 var readyList= [];//把需要执行的方法先暂存在这个数组里 var timer;//定时器句柄 ready=function(fn)  {  if (isReady )   fn.call( document);  else   readyList.push( function() { return fn.call(this);});  return this; } var onDOMReady=function(){  for(var i=0;i< readyList.length;i++)  {   readyList[i].apply(document);  }  readyList = null; } var bindReady = function(evt) {  if(isReady) return;  isReady=true;  onDOMReady.call(window);  if(document.removeEventListener)  {   document.removeEventListener("DOMContentLoaded", bindReady, false);  }  else if(document.attachEvent)  {   document.detachEvent("onreadystatechange", bindReady);   if(window == window.top){    clearInterval(timer);    timer = null;   }  } }; if(document.addEventListener){  document.addEventListener("DOMContentLoaded", bindReady, false); } else if(document.attachEvent) {  document.attachEvent("onreadystatechange", function(){   if((/loaded|complete/).test(document.readyState))   bindReady();  }); if(window == window.top) {  timer = setInterval(function(){   try   {    isReady||document.documentElement.doScroll('left');//在IE下用能否执行doScroll判断 dom是否加载完毕   }   catch(e)   {    return;   }   bindReady();  },5); } }})();使用方法如下:复制代码 代码如下:

焦点访谈

最新最热的文章

更多 >

COPYRIGHT (©) 2017 Copyright ©2017 365体育在线备用网址 网站地图

联系我们

827570882

扫描二维码分享到微信