javascript
var payBankSelect = $("#detailStoreEscheatInfofxj").find("[basicType]").eq(0); html元素中 属性名 basicType <select id ="" basicType ></select>
ajax中
dataType: "json"(jsonp的区别)
String callback = request.getParameter("callback" );
response.getWriter().write(callback +"(" +info +")" );
<li class= "pro-titl" state="040" >
var lis=$("li.pro-titl");根据属性快速筛选元素
$(this).delay(200).hide(0); //延迟执行
this.value = value.replace(/\s/g,'').replace(/(\d{4})(?=\d)/g,"$1");//清除非数字
后台判断是否为Ajax调用
beforeSend: function(xhr) {
xhr.setRequestHeader("dataType", "html");
},
complete : function(XMLHttpRequest,status){
if(status == "timeout"){
ajaxTimeoutTest.abort();
alert("操作超时!");
}
}
后台获取
String requestType = request .getHeader("X-Requested-With" );
String dataType = request.getHeader( "dataType");
阻止事件冒泡
<span class= 'tipboxNextbtn' onclick='newCardIntroClose(event)' >页面中传入事件
function stopBubble(e){
var id = e.target.id;
if (e && e.stopPropagation)
e.stopPropagation()
else
window.event.cancelBubble=true
}
//$("#run1").one("click",function(){//只执行一次
// alert();
//});
text() 所有匹配元素文本内容组合起来的文本 html() 取得第一个匹配元素的html内容
滚动条到底部再次加载数据
$(window).scroll(function(){
var pageH = $(document).height();
var clientH = $(window).height();
var hideH = $(document).scrollTop();
if(parseInt(hideH + clientH) >= (parseInt(pageH)-5)){
alert("鼠标滚动到底部异步加载数据");
}
});
var browser=navigator.appName var b_version=navigator.appVersion var version=b_version.split(";"); var trim_Version=version[1].replace(/[ ]/g,""); if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE6.0") { alert("IE 6.0"); } var browserVersion = window.navigator.userAgent.toLowerCase(); if(browserVersion.indexOf("chrome") > -1){//谷歌浏览器 $("#wx_scancode_id").attr("width","250").attr("height","250"); } if(browserVersion.indexOf("msie") > -1){//ie $("#wx_scancode_id").css("padding-bottom","10px"); }
document.write(Math.round(aa * 100) / 100); // 2.34 四舍五入 Math.round()舍入为最接近的整数
Number.toFixed(x)截取小数点后x位
Number.toPrecision(x)截取指定x长度
if(/[^a-zA-Z\u4e00-\u9fa5\·]/g.test(userName)){//加上^取反
appendError(userId, "姓名格式不正确" );
}
**************************************************************jQuery相关**************************************************************
var value = value ? value:""; //表达式为“”null或undefined就为假 能取到不为空的值就为真
function funcV(){
var i=0,glovalV2 = "ee";//定义多个局部变量
glovalV="glo";//定义全局变量
}
$("#platform-kjzf #bankItem .hover_li").eq(0) //所选元素集的第一个
$('.kjzf-choosedBank span').first().html("储蓄卡2");
$.each() 方法,此方法可用于例遍任何对象,并对其分别处理
var num = /^\d*$/; //全数字 exec和match区别
◎Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
◎Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
◎Math.round()执行标准舍入
net.sf.json.JSONArray
类选择器
$("#${fastPayId} .xuan_hd").css("margin-top","0px");
父页面 禁止网页后退的两种办法
window.history.forward(1);
新页面
<script type="text/javascript">
$(window).unload(function(){//离开网页触发的事件
location.replace(location.href);
});
</script>
$(window).unbind("unload");//解除离开网页触发的事件 在disabledBackspace.js中绑定
*********************************************javascript**************************************
$(document).ready(function() {}); 可以在DOM载入就绪能够读取并操纵时立即调用你所绑定的函数
var pageH = $(document).height(); 文档高度
var clientH = $(window).height(); 窗口高度
var hideH = $(document).scrollTop(); 相对滚动条顶部的偏移
/^\d*$/g 带不带g区别 对于表达式对象的test方法,加入g于不加上g没有什么区别
"<dt style='margin:0;'><i class='spt "+(i != (resultData.length - 1)?'':'bigGreen') +"'></i>";//第一个节点显示bigGreen
switch case break.....default
//点击"跟踪"里面的"展开",动态拼接的元素,父元素div里拼接a
$(".padcursor").delegate("a","click",function(){......
$("#folderNameInit").data("mycache","mycachevalue");//放缓存
alert($("#folderNameInit").data("mycache"));//获取缓存
this.value = value.replace(/\s/g,'').replace(/(\d{4})(?=\d)/g,"$1");//清除非数字
闭包函数 避免了大量使用全局变量
var param1; var closesrc = function(){ var param1 = "p1"; return{ fun1:function(){ return param1; }, fun2:function(){ return this; } } }; alert(closesrc().fun1()+" "+param1); var bg = function(){ var i = 0; var func = { init:function(){ i = 1; return func; }, add:function(){ i++; return func; }, re:function(){ return i; } } return func; }; alert(bg().init().add().re());
--->$.inArray(file,imgArr)指定元素在数组中的位置,变相的用来判断是否包含该元素
var file = "jpg";
var imgArr = ["bmp","jpg","gif","png"];
alert($.inArray(file,imgArr));
--->$.map(array, callback)将一个数组中的元素转换到另一个数组中
$.map( [0,1,2], function(n){
return n + 4;
});
--->$.grep(array,callback)过滤数组
$.grep( [0,1,2], function(n,i){
return n > 0;
});
--->$.parseJSON()接受一个JSON字符串,返回解析后的对象
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name );
--->$.browser.mozilla判断浏览器及版本version 此属性在 DOM 树加载完成前即有效,可用于为特定浏览器设置 ready 事件
ie7 = $.browser.msie && $.browser.version=="7.0",
alert(" mozilla:"+$.browser.mozilla+" msie:"+$.browser.msie+" "+$.browser.version);
--->$.isNumeric() 判断是否是数字
--->冒泡事件解决,父div的onclick事件同样会被触发
function sonOver(obj,evt){
alert(obj.id+" "+evt);
var e=(evt)?evt:window.event; //判断浏览器的类型,在基于ie内核的浏览器中的使用cancelBubble
if(window.event){
e.cancelBubble=true;
}else{
e.stopPropagation(); //在基于firefox内核的浏览器中支持做法stopPropagation
}
}
$("#sonDiv").mousemove(function(event){......
--->粘贴内容过多截取
$("#approvalOpinion").bind("paste",function(event){
var pastedText = undefined||"";
if (window.clipboardData && window.clipboardData.getData) { // IE
pastedText = window.clipboardData.getData('Text');
} else {
pastedText = event.originalEvent.clipboardData.getData('Text');
}
if(!pastedText){
return false;
}
if(String(pastedText).length > 200){
//alert("粘贴内容太多!");
$(this).val(String(pastedText).substring(0, 200));
return false;
}
});
第一步,创建xmlhttprequest对象,var xmlhttp =new XMLHttpRequest();XMLHttpRequest对象用来和服务器交换数据。 第二步,使用xmlhttprequest对象的open()和send()方法发送资源请求给服务器。 第三步,使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应 第四步,onreadystatechange函数,当发送请求到服务器,我们想要服务器响应执行一些功能就需要使用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数。onreadystatechange属性存储一个当readyState发生改变时自动被调用的函数。 readyState属性,XMLHttpRequest对象的状态,改变从0到4,0代表请求未被初始化,1代表服务器连接成功,2请求被服务器接收,3处理请求,4请求完成并且响应准备。 status属性,200表示成功响应,404表示页面不存在。 在onreadystatechange事件中,服务器响应准备的时候发生,当readyState==4和status==200的时候服务器响应准备,表示可以获取服务器响应 收银台支付 1,订单系统通过签名的方式提交orderNo到收银台,通过站点账号匹配收银台(支付方式、及其银行) 2,点击某个银行(收银台、银行、供应商分发)如果配置多个按比例、金额分发 AtomicInteger轮询--compareAndSet(current,next) 保存next,如果在执行过程中其他线程改变了current,则本次保存不成功,继续循环取值 // 线程安全,以原子方式将当前值加1,注意:这里返回的是自增前的值。 return counter.getAndIncrement(); 3,打开供应商页面(支付请求成功),渠道表:渠道支付成功后有页面回调(030支付完成待确认)、异步回调(040支付成功)、050重复支付 支付成功、重复支付都会被支付成功子任务扫到,进而触发通知业务系统定时任务 select * from tbl_pay_supplier_info --支付供应商基本表 select * from tbl_supplier_bank_config -- 供应商关联银行配置表 select * from tbl_supplier_merchant --供应商商户号表 select * from tbl_cashier_config -- 收银台主配置表 100084 select * from tbl_cashier_config_detail ccd where ccd.cashier_code='100084' --收银台配置明细表 select * from tbl_channels_part where cashier_code='100084' --支付渠道分流表 quartz 0/5 * * * * ? 从0秒开始每5秒执行一次 springframework.scheduling.quartz 1,创建Scheduler调度器,根据任务配置表达式建立触发器trigger,创建job信息jobDetail(具体任务处理类A)设置TaskBasicConfig信息 2,具体任务处理类A,实现了Job接口,可以获取TaskBasicConfig信息(数据库中配置,任务处理类名,spring容器中获取实体并执行) scheduler.scheduleJob(jobDetail, trigger); 任务就会执行 scheduler.rescheduleJob(triggerKey, trigger); 重新设置执行频率 web控制台进行操作来创建exchange和queue,并完成绑定动作 a) 如果是Direct类型,则会将消息中的RoutingKey与该Exchange关联的所有Binding中的BindingKey进行比较,如果相等,则发送到该Binding对应的Queue中。 b) 如果是 Fanout 类型,则会将消息发送给所有与该 Exchange 定义过 Binding 的所有 Queues 中去,其实是一种广播行为 fanout表示分发,所有的消费者得到同样的队列信息 c)如果是Topic类型,则会按照正则表达式,对RoutingKey与BindingKey进行匹配,如果匹配成功,则发送到对应的Queue中 如果消费者绑定同一队列,每个消费者获取不同的消息