1. js中的prototype
参考文档:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html
- prototype就是“一个给类的对象添加方法的方法”,使用prototype属性,可以给类动态地添加方法,以便在JavaScript中实现“继承”的效果。
(1) js中常见的三种方法
function People(name){
this.name=name;
//★对象方法
this.Introduce=function(){
alert("My name is "+this.name);
}
}
//★★类方法
People.Run=function(){
alert("I can run");
}
//★★原型方法
People.prototype.IntroduceChinese=function(){
alert("我的名字是"+this.name);
}
//测试
var p1=new People("Windking");//创建对象
p1.Introduce();//对象方法调用
People.Run();//类方法调用
p1.IntroduceChinese();//原型方法调用
(2) js中对象的prototype属性
- javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用
function baseClass(){
this.showMsg = function(){
alert("baseClass::showMsg");
}
}
function extendClass(){
}
extendClass.prototype = new baseClass();//理解为:extendClass是以baseClass的一个实例为原型克隆创建的
var instance = new extendClass();
instance.showMsg(); // 显示baseClass::showMsg
A.prototype = new B();
不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的[是克隆而不是继承]
下面我们首先定义了baseClass类,然后我们要定义extentClass,以baseClass的一个实例为原型,来克隆的extendClass也同时包含showMsg这个对象方法
function baseClass(){
this.showMsg = function(){
alert("baseClass::showMsg");
}
}
function extendClass(){
}
extendClass.prototype = new baseClass();//理解为:extendClass是以baseClass的一个实例为原型克隆创建的
var instance = new extendClass();
instance.showMsg(); // 显示baseClass::showMsg
- 问题1:如果extendClass中本身包含有一个与baseClass的方法同名的方法会怎么样?
function baseClass(){
this.showMsg = function(){
alert("baseClass::showMsg");
}
}
function extendClass(){
this.showMsg =function (){
alert("extendClass::showMsg");
}
}
extendClass.prototype = new baseClass();
var instance = new extendClass();
instance.showMsg();//显示extendClass::showMsg
结论:★★函数运行时会先去本体的函数中去找,如果找到则运行,找不到则去prototype中寻找函数。
- 问题2:使用extendClass的一个实例instance调用baseClass的对象方法showMsg怎么办?
extendClass.prototype = new baseClass();
var instance = new extendClass();
var baseinstance = new baseClass();
//★★通过使用call函数,参数是实例instance,调用者是基类对象方法
baseinstance.showMsg.call(instance);//显示baseClass::showMsg
- 综合练习:
function baseClass(){//基类
this.showMsg = function(){//基类方法
alert("baseClass::showMsg");
}
this.baseShowMsg = function(){//基类方法
alert("baseClass::baseShowMsg");
}
}
baseClass.showMsg = function(){
alert("baseClass::showMsg static");
}
function extendClass(){
this.showMsg =function (){
alert("extendClass::showMsg");
}
}
extendClass.showMsg = function(){
alert("extendClass::showMsg static")
}
extendClass.prototype = new baseClass();
var instance = new extendClass();
instance.showMsg(); //显示extendClass::showMsg
instance.baseShowMsg(); //显示baseClass::baseShowMsg
instance.showMsg(); //显示extendClass::showMsg,对应问题1
baseClass.showMsg.call(instance);//显示baseClass::showMsg static,对应问题1、2
var baseinstance = new baseClass();
baseinstance.showMsg.call(instance);//显示baseClass::showMsg
jquery的html,text,val
- .html()用为读取和修改元素的HTML标签
- .text()用来读取或修改元素的纯文本内容
- .val()用来读取或修改表单元素的value值
html属性中有两个方法,一个有参,一个无参
- 无参html():取得第一个匹配元素的html内容。这个函数不能用于XML文档。但可以用于XHTML文档,返回的是一个String
例子:
html页面代码:<div><p>Hello</p></div>
jquery代码:$("div").html();
结果:Hello
- 有参html(val):设置每一个匹配元素的html内容。这个函数不能用于XML文档。但可以用于XHTML文档。返回一个jquery对象
例子:
html页面代码:<div></div>
jquery代码:$("div").html("<p>Nice to meet you</p>");
结果:[ <div><p> Nice to meet you</p></div> ]
text属性中有两个方法,一个有参,一个无参
- 无参text():取得所有匹配元素的内容。结果是由所有匹配元素包含的文本内容组合起来的文本。返回的是一个String
例子:
html页面代码:<p><b>Hello</b> fine</p>
<p>Thank you!</p>
jquery代码:$("p").text();结果:HellofineThankyou!
- 有参text(val):设置所有匹配元素的文本内容,与 html() 类似, 但将编码 HTML (将 "<" 和 ">" 替换成相应的HTML实体).返回一个jquery对象
例子:html页面代码:<p>Test Paragraph.</p>
jquery代码:$("p").text("<b>Some</b> new text.");
结果:[ <p><b>Some</b> new text.</p> ]
val()属性中也有两个方法,一个有参,一个无参。
- 无参val():获得第一个匹配元素的当前值。在 jQuery 1.2 中,可以返回任意元素的值了。包括select。如果多选,将返回一个数组,其包含所选的值。
例子:多选下拉框,$('#multiple').val()返回数组。$("#multiple").val().join(", "))以,连接数组中每个值
html页面代码:<p></p><br/> <select id="single"> <option>Single</option> <option>Single2</option> </select> <select id="multiple" multiple="multiple"> <option selected="selected">Multiple</option> <option>Multiple2</option> <option selected="selected">Multiple3</option> </select> jquery代码: ("p").append( "<b>Single:</b> " + $("#single").val() + " <b>Multiple:</b> " + $("#multiple").val().join(", "));
结果:[ <p><b>Single:</b>Single<b>Multiple:</b>Multiple, Multiple3</p>]
- 有参val(val):设置每一个匹配元素的值。在 jQuery 1.2, 这也可以为check,select,radio元件赋值,返回一个jquery对象
例子:
html页面代码:
<input type="text"/>
jquery代码:$("input").val("hello world!");
结果:hello world!
- 1. 问题:用$("#id")来获得页面的input元素的时候,发现$("#id").value不能取到值
总/错误分析:
$("")是一个jquery对象,而不是一个dom element
value是dom element的属性,jquery与之对应的是val
val():获得第一个匹配元素的当前值。
val(val):设置每一个匹配元素的值。
示例:
取值:val = $("#id")[0].value;
赋值:$("#id")[0].value = "new value";
或者1:$("#id").val("new value");
或者2:val = $("#id").attr("value");
- 2. JS中的return false、return true
参考文档:return false http://blog.sina.com.cn/s/blog_648f22760100zrv3.html
Return False 就相当于终止符, 一般是用来取消默认动作的。比如你单击一个链接除了触发你的onclick事件(如果你指定的话)
以外还要触发一个默认事件用于执行页面的跳转。所以如果你想取消对象的默认动作就可以return false。return false 只在当前函数有效,不会影响其他外部函数的执行。
Return True 就相当于执行符
return 把控制权返回给页面。
- 3. 常用正则表达式
var regex = /^[0-9]{11}$/g;// 仅支持数字格式且长度为11-->手机号码
var regexce= /[,。、;:‘”、|!.,()^()¥`~!@#$%^&*_+<>{}\/'[\]0-9(^\s*)|(\s*$)]/im;//中文英文
var regexName = /[,。、;:‘”、|!.,()^()¥`~!@#$%^&*_+<>{}\/'[\](^\s*)|(\s*$)]/im;//中文英文数字
- 4. css() 方法返回或设置匹配的元素的一个或多个样式属性
当用于返回一个值时,不支持简写的 CSS 属性(比如 "background" 和 "border")。
示例:
$("#showReallyPre").css({
display:'block'
});
$("p").css("color","red");
- 5. jQuery 中的 blur() 方法当元素失去焦点时发生 blur 事件:http://www.w3school.com.cn/jquery/event_blur.asp
blur() 函数触发 blur 事件,或者如果设置了 function 参数,该函数也可规定当发生 blur 事件时执行的代码
- 6. CSS3 opacity 属性:
设置 div 元素的不透明级别:http://www.w3school.com.cn/cssref/pr_opacity.asp
IE8 以及更早的版本支持替代的 filter 属性。例如:filter:Alpha(opacity=50)。
语法:opacity:value|inherit;
value 规定不透明度。从 0.0 (完全透明)到 1.0(完全不透明)。
inherit 应该从父元素继承 opacity 属性的值。
7. 在html中鼠标经过时样式改变: http://dwcmayday201204063551.iteye.com/blog/1568122
变换鼠标形状:
变换背景图片:οnmοusemοve="this.style.cursor='hand';" οnmοuseοut="this.style.cursor='auto';"
鼠标略过时的颜色οnmοusemοve="this.style.backgroundImage='url(Images/HomeTBGCChange.jpg)'" οnmοuseοut="this.style.backgroundImage='url(Images/HomeTBGC.jpg)'"
鼠标离开时的颜色onMouseOver="this.style.color='#8E6235
变换文字颜色:onMouseOut="this.style.color='#808284'"
<a href="www.baidu.com" target="..." onMouseOver="this.style.color='#8E6235';this.style.textDecoration='underline'" onMouseOut="this.style.color='#808284';this.style.textDecoration='none'">文本</a>
示例:
<!-- 说明:其它相关示例:http://www.w3school.com.cn/tiy/t.asp?f=css3_opacity_js onMouseOver="JavaScript:this.style.backgroundColor='#FF0000';" 这一句是鼠标通过时行背景要显示的#FF0000颜色 onMouseOut="JavaScript:this.style.backgroundColor='';" 这一句是鼠标离开时行背景要显示的颜色,这里颜色代码留空,表示恢复行原来的背景颜色。 --> <html> <head> <title>使用脚本(JavaScript)实现鼠标通过(onMouseOver)/离开(onMouseOut)文本、图片、表格时的特殊效果__浪人文章</title> <meta http-equiv="Content-Type" content="text/html;charset=gb2312"> </head> <body> 1.文本测试:<br> <font face="宋体" size="3" color="#008000" onMouseOver="JavaScript:this.style.color='#FF0000';" onMouseOut="JavaScript:this.style.color='';">文本测试:鼠标通过时,文本改变颜色,离开后恢复原来的颜色</font><br> <font face="宋体" size="3" color="#008000" onMouseOver="JavaScript:this.style.color='#FF0000';this.style.textDecoration='underline';" onMouseOut="JavaScript:this.style.color='#0000FF';this.style.textDecoration='none';">文本测试:鼠标通过时,文本改变颜色并显示下划线,第一次离开后又改变成另外一种颜色</font><br> <font face="宋体" size="3" color="#008000" onMouseOver="JavaScript:this.style.backgroundColor='#FF0000';" onMouseOut="JavaScript:this.style.backgroundColor='';">文本测试:鼠标通过时,文本背景改变颜色,离开后恢复原来的颜色</font><br> <font face="宋体" size="3" color="#008000" onMouseOver="JavaScript:this.style.backgroundColor='#FF0000';this.style.textDecoration='underline';" onMouseOut="JavaScript:this.style.backgroundColor='#0000FF';this.style.textDecoration='none';">文本测试:鼠标通过时,文本背景改变颜色并显示下划线,第一次离开后又改变成另外一种颜色</font><br> <hr/> 2.图片测试 <br> 图片载入时比较模糊,当鼠标通过时变得清晰,离开后又恢复原来的样子(opacity 后面的数字是调节清晰度的,要多少清晰度自己修改):这里应用了 filter属性,只有IE8及以下浏览器支持<br> <img src="./image/buzhou.png" border="0" style="filter:alpha(opacity=10);" onMouseOver="JavaScript:this.filters.alpha.opacity='20';" onMouseOut="JavaScript:this.filters.alpha.opacity='60';"> <br> <hr/> 3.表格测试<br> <table border="1" width="500" height="10"> <tr bgcolor="#FFFFFF" onMouseOver="JavaScript:this.style.backgroundColor='#FF0000';" onMouseOut="JavaScript:this.style.backgroundColor='';"> <td height="30" width="490">当鼠标通过这一行时,背景颜色改变,离开时又恢复原来的颜色</td> </tr> <tr> <td height="30" width="490"></td> </tr> </table> <br> </body> </html>
附录示例代码:
/** 理解:this.replace() * replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 * * 前面的字符任意多个 ? 前面的字符0个或1个 + 前面的字符1个或以上 s* s任意多个 ^s* 以s开头的s任意多个 s*$ 以s结尾的s任意多个 /(^s*)|(s*$)/g 全局模式下,匹配任意多个s开头、或任意多个s结尾的字符 return this.replace(/(^s*)|(s*$)/g, ""); 删除字符串头尾的任意多个s,并返回处理后的字符串 */ /**给String添加一个自定义的方法:用于去除输入框内容的左右空格*/ String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }; String.prototype.ltrim = function() { return this.replace(/(^\s*)/g, ""); }; String.prototype.rtrim = function() { return this.replace(/(\s*$)/g, ""); }; /**检查电话格式是否合格*/ function phoneCheck(id){ var pp = document.getElementById(id).value; var mobilePhone=/^((\(\d{2,3}\))|(\d{3}\-))?1\d\d{9}$/; var phone=/^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/; if(!mobilePhone.test(pp) && !phone.test(pp)){ alert("电话号码输入有误!\n如果您的号码带有区号,请在区号后加横杠"); return false; } return true; } /**获得详细服务:点击按钮,提交action请求*/ //对应jsp代码:<img src="${s.imageUrl }" width="100%" οnclick="goDetailService('${pageContext.request.contextPath }/homeAction.do?method=getService','${s.id}');"/> function goDetailService(url, id) { document.getElementById("id2").value=id;//赋值 document.getElementById("form_service").action=url;//赋值 document.getElementById("form_service").submit();//★HTML DOM submit()方法把表单数据提交到 Web 服务器 } //对一个jsp代码:<input value="上 一 步" type="button" οnclick="javascript:closeDiv('popPwDiv');showDiv('popUserDiv');" οnmοuseοver="style.opacity='0.6'" οnmοuseοut="style.opacity='1'"/> /**★★关闭指定div层*/ function closeDiv(div) { //★★.style.display属性:设置或检索对象是否及如何显示 //★none是隐藏对象,与visibility属性的hidden值不同,其不为被隐藏的对象保留其物理空间 document.getElementById(div).style.display = 'none'; //对应html代码:<div id="bg" class="bg" style="display:none;"></div> document.getElementById('bg').style.display = 'none'; document.getElementById('popIframe').style.display = 'none'; } /**★★弹出指定div层*/ function showDiv(divId) { if(divId=="popUserDiv"){//添加500w时校验是否填写规模 if(document.getElementById("show").innerHTML.indexOf("请填写以下规模")!=-1){ alert("请填写规模"); return -1; } } var showFlag=true; $("#"+divId).css({ top:(($(window).height()-$("#"+divId).outerHeight())/2) }); if(showFlag==true){ document.getElementById(divId).style.display = 'block'; document.getElementById('bg').style.display = 'block'; } } /**★异步校验用户填写信息*/ function checkUserMSG() { var regex = /^[0-9]{11}$/g;// 仅支持数字格式且长度为11-->手机号码 var regexce= /[,。、;:‘”、|!.,()^()¥`~!@#$%^&*_+<>{}\/'[\]0-9(^\s*)|(\s*$)]/im;//中文英文 var regexName = /[,。、;:‘”、|!.,()^()¥`~!@#$%^&*_+<>{}\/'[\](^\s*)|(\s*$)]/im;//中文英文数字 if(document.getElementById('contactName').value==""){ alert("请认证填写您的姓名"); return false; } if(regexce.test(document.getElementById('contactName').value)){ alert("请检查您的姓氏是否有非法字符,仅支持中英文"); return false; } if(phoneCheck('contactTelephone')==false){ return false; } if(document.getElementById('enterpriseName').value==""){ alert("请填写您的企业名称"); return false; } if(regexName.test(document.getElementById('enterpriseName').value)){ alert("检查企业名称是否有非法字符"); return false; } return true; } /** * 500W以上时的原价、折扣价 【需要计算公式 测试→原 价:营 业 额*0.5*1000+资产总额*0.5*1000】100万-500万 A*0.001+2000 * 添加服务id方便显示定金 */ function getMoney(id) { var regex1 = /^[0-9]*$|[0-9]{1,5}\.[0-9]{1,2}$/; var regex2 = /^[0-9]*$|[0-9]{1,5}\.[0-9]{1,2}$/; if(document.getElementById('yye').value!=""&&document.getElementById('zcze').value!=""){ if(id == 3 && (document.getElementById('yye').value >= 500 || document.getElementById('yye').value <= 300)){ alert("请注意:营业额至少300万起,500万上限。"); document.getElementById('yye').value=""; document.getElementById('zcze').value=""; / 【添加】 document.getElementById('original').innerHTML="¥"; document.getElementById('show').innerHTML="¥请填写以下规模"; document.getElementById('zhoushi').style.display='none'; document.getElementById('guanggao').style.display='block'; return -1; } if(id == 2 && (document.getElementById('yye').value <= 100 || document.getElementById('yye').value >= 300)){ alert("请注意:营业额至少100万起,300万上限。"); document.getElementById('yye').value=""; document.getElementById('zcze').value=""; / 【添加】 document.getElementById('original').innerHTML="¥"; document.getElementById('show').innerHTML="¥请填写以下规模"; document.getElementById('zhoushi').style.display='none'; document.getElementById('guanggao').style.display='block'; return -1; } ///填写格式不正确时处理 if(!regex1.test(document.getElementById('yye').value) || !regex2.test(document.getElementById('zcze').value)){ alert("规模填写格式不正确\n不允许非法字符且最多精确到两位小数"); document.getElementById('yye').value="" document.getElementById('zcze').value="" document.getElementById('original').innerHTML="¥"; document.getElementById('show').innerHTML="¥请填写以下规模"; document.getElementById('zhoushi').style.display='none'; //此元素不会被显示 document.getElementById('guanggao').style.display='block'; //此元素将显示为块级元素,此元素前后会带有换行符。//扩展:display="null"是隐藏 而display="" 是重新显示 return -1; } / 【添加】 document.getElementById('original').innerHTML="¥"+(Math.floor(document.getElementById('yye').value*10000*0.001+2000)); document.getElementById('show').innerHTML="¥"+Math.floor((document.getElementById('yye').value*10000*0.001+2000)*0.7*document.getElementById('zkl').innerHTML*0.1); $('#imgrefresh').click(); if(id==2){ //document.getElementById('original').innerHTML="¥2100~¥3500"; document.getElementById('showReally').innerHTML="¥500"; }else if(id==3){ //document.getElementById('original').innerHTML="¥3500~¥4900"; document.getElementById('showReally').innerHTML="¥800"; } $("#showReallyPre").css({ display:'block' }); $("#showReally").css({ display:'block' }); }if(document.getElementById('yye').value==""||document.getElementById('zcze').value==""){ document.getElementById('original').innerHTML="¥"; document.getElementById('show').innerHTML="¥请填写以下规模"; document.getElementById('zhoushi').style.display='none'; document.getElementById('guanggao').style.display='block'; } } /**设置企业名称、证书信息*/ function getCerSn(id) { try{ fsCA.AtvInit(); }catch(e){ alert("请确认是否已经安装证联客户端"); return -1; } var sigCert = fsCA.GetCert(2); var certInfo = fsCA.GetCertInfo(sigCert); var indx1 = certInfo.indexOf("<serialnum>"); var indx2 = certInfo.indexOf("</serialnum>"); var certSn=certInfo.substring(indx1 + 11, indx2) if(certSn==""){ alert("请检查数字证书是否插入"); return -1; } var subject=certInfo.substring(certInfo.indexOf("<subject>")+9,certInfo.indexOf("</subject>")); var indx1 = subject.indexOf("<dn_o>"); var indx2 = subject.indexOf("</dn_o>"); var Certsn = subject.substring(indx1 +6, indx2); document.getElementById(id).value=Certsn; document.getElementById("certInfo").value=certInfo; } /** 获得服务签名协议书*/ function signContractData() { try{ fsCA.AtvInit(); }catch(e){ alert("请确认是否已经安装证联客户端"); return -1; } var sigCert = fsCA.GetCert(2); var certInfo = fsCA.GetCertInfo(sigCert); var indx1 = certInfo.indexOf("<serialnum>"); var indx2 = certInfo.indexOf("</serialnum>"); var certSn=certInfo.substring(indx1 + 11, indx2) if(certSn==""){ alert("请检查数字证书是否插入"); return -1; } var r=document.getElementById("contract").innerHTML; var signData = fsCA.SignData(r,32772,0); fsCA.Logout(); //加上"+"号变空格的解决办法 20150325 document.getElementById("signData").value=signData.replace(/\+/g, '%2B'); return ; } /**我的订单的展示 请插入key*/ function showMyOrders(url) { try{ fsCA.AtvInit(); }catch(e){ alert("请确认是否已经安装证联客户端"); return -1; } var sigCert = fsCA.GetCert(2); var certInfo = fsCA.GetCertInfo(sigCert); var indx1 = certInfo.indexOf("<serialnum>"); var indx2 = certInfo.indexOf("</serialnum>"); var certSn=certInfo.substring(indx1 + 11, indx2) if(certSn==""){ alert("请检查数字证书是否插入"); return -1; }else{ window.location.href=url+"&certSn="+certSn; } } $(document).ready(function() {///document 属性、时间准备中 /*$('img').css({ cursor : 'pointer' });*/ //提交用户信息 $('#toSign').click( function(){ if(checkUserMSG()){ closeDiv('popUserDiv'); document.getElementById("enterprise1").innerHTML=document.getElementById("enterpriseName").value; /*document.getElementById("enterprise2").innerHTML=document.getElementById("enterpriseName").value;*/ document.getElementById("hetongPrice").innerHTML=document.getElementById("show").innerHTML.replace("¥",""); document.getElementById("hetongtitle").innerHTML=document.getElementById("name").value; showDiv('popPwDiv'); } } ); //同意签署 $('#toSubmit').click( function(){ signContractData(); var costPrice; costPrice=document.getElementById('show').innerHTML.replace("¥",""); var contactNameTmp=document.getElementById("contactName").value+$("input[name='P']:checked").val(); DOC88Window.win({message:$('#loadDiv').html()}); $.ajax({ type : "POST", dataType : "text", async:false, //异步: url : "homeAction.do?method=goOrder", / 【添加营业额和资产总额】 data:"id="+document.getElementById("id").value+"&contactName="+contactNameTmp+"&contactTelephone="+document.getElementById("contactTelephone").value+"&enterpriseName="+document.getElementById("enterpriseName").value+"&certInfo="+document.getElementById("certInfo").value+"&signData="+document.getElementById("signData").value+"&costPrice="+costPrice+"&turnover="+document.getElementById("yye").value+"&asserts="+document.getElementById("zcze").value, success : function(data) { if(data.split("&")[0]=="success"){ closeDiv('popPwDiv'); document.getElementById("Moneny").innerHTML=document.getElementById("showReally").innerHTML.replace("¥",""); document.getElementById("orderId").innerHTML=data.split("&")[1]; showDiv('popPayDiv'); }else if(data=="false"){ closeDiv('popPwDiv'); alert("签署合同失败,请检查填写信息并确保您当前已插入key"); }else{ closeDiv('popPwDiv'); alert(data); } }, error : function(result) { closeDiv('popPwDiv'); alert("提交失败,操作失败"); } }); DOC88Window.close(); } ); }); /**付款 弹出层新建窗口打开连接*/ function payMoney(orderId,subject,moneny) { var url="alipayAction.do?method=handleRequest"; if(document.getElementById("popPayDiv")!=null){ closeDiv('popPayDiv'); } showDiv('popAfterPayDiv'); window.open(url+"&WIDout_trade_no="+orderId+"&WIDsubject="+subject+"&WIDtotal_fee="+moneny); } /**立即购买*/ function reallyBuy() { if(document.getElementById("zcze").value==""||document.getElementById("yye").value==""){ document.getElementById('serviceInfoTab').style.display='block'; document.getElementById('moreInfoTab').style.display='none'; document.getElementById('leftbar').style.display='none'; } if(document.getElementById("buyNowMsg").innerHTML=="已购买"){ return -1; } if(getCerSn('enterpriseName')!=-1){ if(document.getElementById('gameOver').innerText=="活动已结束") { alert('很抱歉,当前活动已结束,不允许购买'); return -1; } else{ / 20150327 添加判断是否已经购买 gotoCheckBuyOrNot(); if(document.getElementById("buyNowMsg").innerHTML=="已购买"){ return -1; } showDiv('popUserDiv'); / } } } /**添加判断是否已经购买*/ function gotoCheckBuyOrNot() { DOC88Window.win({message:$('#loadDiv').html()}); $.ajax({ type : "POST", dataType : "text", async:false, //异步: url : "homeAction.do?method=checkBuyOrNot", data:"id="+document.getElementById("id").value+"&certInfo="+document.getElementById("certInfo").value, success : function(data) { if(data=="success"){ closeDiv('popPwDiv'); //alert("可以购买该服务"); }else{ closeDiv('popPwDiv'); alert("该服务您已购买过,请前往订单中心确认是否已经付款"); document.getElementById("buyNowMsg").innerHTML="已购买"; $('#buyNowMsgButton').css({ backgroundColor:'gray' }); } }, error : function(result) { closeDiv('popPwDiv'); alert("提交失败,操作失败"); } }); DOC88Window.close(); }