js 使用中一些需要提醒的点
1.js 中可以直接使用输出java 变量
<script>
var path = '<%=basePath%>';
2.js重新注册事件后,如何让事件不自动执行?
mzTxt.onclick =function(){hiddeBox();} 或者: mzTxt.onclick =hiddeBox;
不能或者: mzTxt.onclick =hiddeBox();
function delegate(fn,params,obj){ return function(){ fn.call(obj||window,params); } }
var pFunc = function(i){alert(i)};
alink.onclick = delegate(pFunc,i,alink);
ref:http://blog.csdn.net/xiaohai0504/article/details/7735971
3.1看下js的闭包和作用域概念???????????变量提升 + 闭包 造成的 你自己摸索下
这个是js的闭包事件问题,也就是说你看着循环绑定的事件,其实你可能只有最后一个控件才有事件绑定,其他的都没用。你要对绑定做闭包函数的控制才行。
首先你的错误是由于闭包造成的,虽然修改后可以避免错误,但我强烈建议你使用事件委托完成事件绑定。代码可以修改如下:
function test(){
var doc=document.getElementsByTagName('body')[0];
doc.onclick=function(e){
e=e || window.event;
var tagChild=e.srcElement||e.target;
if(tagChild.nodeType==1 && tagChild.tagName.toLowerCase()=="p"){
alert(tagChild.id);
}
tagChild=null;
}
}
优点:
1.页面监听事件的标签元素减少,有效提高性能问题;
2.减少使用for循环绑定事件,同样提高了性能;
性能提高了,你的代码质量就会得到认可。
http://blog.csdn.net/yinxiangzhongqing/article/details/54018527
1、使用闭包
2、引入jQuery,使用其中的on或delegate进行事件绑定(它们都有事件代理的特性)
4.用js实现trim()的解决办法
去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim、ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写。下面的实现方法是用到了正则表达式,效率不错,并把这三个方法加入String对象的内置方法中去。
写成类的方法格式如下:(str.trim();)
<script language="javascript">
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,"");
}
</script>
写成函数可以这样:(trim(str))
<script type="text/javascript">
function trim(str){ //删除左右两端的空格
return str.replace(/(^\s*)|(\s*$)/g, "");
}
function ltrim(str){ //删除左边的空格
return str.replace(/(^\s*)/g,"");
}
function rtrim(str){ //删除右边的空格
return str.replace(/(\s*$)/g,"");
}
</script>
5.匿名函数作为函数参数,为什么可以自动执行呢?
<!DOCTYPE html> <html lang="en"> <head> </head> <body> <script> function test( a, b ){ a+=1; b(a); } test(3, function(result){ console.log(result); }); </script> </body> </html>
难道匿名函数自执行了?
错!!!匿名函数!=自执行匿名函数
真相只有1个:匿名函数作为参数,在调用(将匿名函数作为参数的)函数里被调用执行了。
function test( a, b ){ a+=1; // b是对象,函数名也是对象,所以b可以指代一个函数 // 类似c++中的函数名一样 // a被复制给了b(result) // js好灵活 b(a); }
6.动态拼接a的href 的js事件
function callDialog(title,content,cancelFn,okFn){ var $iosDialog1 = $('#iosDialog1'); //dialogTitle $('#dialogTitle').text(title); $('#dialogContent').text(content); if(cancelFn!=null){ $('#dialogCancel').attr('href',"javascript:"+cancelFn+";"); }else{ $('#dialogCancel').attr('href',"javascript:void(0);"); } if(okFn!=null){//href="javascript:void(0);" $('#dialogOk').attr('href',"javascript:"+okFn+";"); }else{ $('#dialogOk').attr('href',"javascript:void(0);"); } $iosDialog1.fadeIn(200); }
callDialog("title","content","d()","dsdsdf()");
一:以方法作为参数
这下来说直接以一个方法来作为参数的写法,直接上代码:
-----------这样调用的方法------------- go(function(){ alert("success"); });
那么,这样直接以一个function作为参数,那么go方法要如接收呢?
-------------以这样的形式接收并调用,这里显示两种方法调用-----------------
function go(fn){ alert("执行go方法");
//下面两种方式都可以 fn(); fn.call(this); }
二:以方法名作为参数
如果参数里面是一个方法的名称,在我拿到这个方法名称的时候,我要如何去调用这个方法呢?
-------------------调用的方式是这样的--------------------- go("hello");//hello是一个方法名称
接收并执行的方式是这样的
-----------------接收并执行------------------ function go(fn){ alert("执行hello方法") //这是调用方法 window[fn].call(this); }
我们可以拿到window[方法名称].call(this);
里面的this,代表着一个对象,如果需要对象来执行这个方法的时候,就需要写,否则的话,参数可以不写
8.
JAVA如何获取ajax.post请求所传的参数
急求,ajax传到后台中的参数GET请求方式可以获得传递的参数,但是post请求方式就无法获得,求高人指点~ @POST @Path("/AddOrderlist") @Produces(MediaType.APPLICATION_JSON) public boolean AddOrderList() throws Exception{ String userid=req.getParameter("userid"); String menuid=req.getParameter("menuid"); }
试过用以下代码
var url="weixin-login!checkValid.action"; var usd=trim($("#loginName").val()); var pass=trim($("#password").val()); $.ajax({ url: url, type: 'POST', async:false, data:{loginName:usd,password:pass}, contentType: "application/json", dataType: 'text',//这里要用jsonp的方式不然会报错 success: function(data) { if(""==data||"false"==data){ alert("return null...error."); return; } alert(data); }, error:function(XmlHttpRequest,errStr,ex){ alert(errStr); return; } });
接收时用@FormParam
@POST @Path("/upload") @Produces("text/plain") public String CcproblemBook(@Context HttpServletRequest req, @FormParam("json") String json) { try { return Problem_phoneService.saveCcproblemFromPhone(json); } catch (Exception e) { e.printStackTrace(); return "false"; } }
参数要这么传播
$.post(url,{参数......},function(data){
);
9.jquery判断checked的三种方法:
.attr('checked): //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false
.prop('checked'): //16+:true/false
.is(':checked'): //所有版本:true/false//别忘记冒号哦
jquery赋值checked的几种写法:
所有的jquery版本都可以这样赋值:
// $("#cb1").attr("checked","checked");
// $("#cb1").attr("checked",true);
jquery1.6+:prop的4种赋值:
// $("#cb1″).prop("checked",true);//很简单就不说了哦
// $("#cb1″).prop({checked:true}); //map键值对
// $("#cb1″).prop("checked",function(){
return true;//函数返回true或false
});
//记得还有这种哦:$("#cb1″).prop("checked","checked");