Feb28

JQuery一个变态的问题小记

Author: leeon  Click: 6651   Comments: 0 Category: javascript  Tag: jquery,select,value

今天遇到一个奇怪的问题,用jquery提取表单值后ajax到后台存储,后台怎么存储都是1,用ie,chrome,ff测试,用断点测试的方式跟踪变量,发现在chrome,ff中都能将正确的值传到后台,唯独在IE下传到后台$_POST获取后是1。这里描述下问题的所在:

JQuery在提取select中的value值时一般写法都是:

[code="js"]
$("#rpm_group").val();
[/code]

这里alert出来是可以正常获取value的,但是今天在IE下却出了问题,后来用fiddler抓HTTP包头,发现传过去的的name是这样的:

但是用chrome抓包头是:

很明显IE画蛇添足给加了一个“[]”让PHP在解析的时候认为是数组。于是将jquery获取select值的方式修改成:

[code="js"]
$("#rpm_group").find("option:selected").val();
[/code]

这样IE在提交POST表单的时候就没有加上中括号了。这个问题很纠结,记得以前在IE下用第一种方式是没有出过问题的呀。

Aug28

JavaScript之trim方法三则

Author: leeon  Click: 7132   Comments: 1 Category: javascript  Tag: trim

ECMAscript 5规定了trim的原生方法,但老的浏览器是不支持的。现提供三种trim的方法来删除字符串头尾的空格。

方法一:

[code="js"]
function trim(text){
return text.replace(/^\s+|\s+$/g,"");
}
[/code]

此方法性能最差,但是编码简单。

方法二:

[code="js"]
function trim(text){
return text.replace(/^\s+/,""),replace(/\s+$/,"");
}
[/code]

较第一种方法性能稍好。

方法三:

[code="js"]
function trim(){
text = text.replace(/^\s+/,"");
for(var i=text.length-1;i>=0;i-){
if(/\S/.test(text.charAt(i))){
text = text.substring(0,i+1);
break;
}
}
}
[/code]

此方法在大规模字符串中性能最好

Aug12

【原创】获取jQuery中Ajax函数的返回值的方法

Author: leeon  Click: 19352   Comments: 4 Category: javascript  Tag: jquery,javascript,ajax

今天在写jquery的ajax方法的时候想获取回调函数中的返回值,但是怎么也获取不到,因为是jquery的方法中嵌套jquery的方法,导致作用域也不好使变量传递数据。

比如像如下的代码:

[code="js"]
$("talbe>td").each(function(){
.........
$.get('xxxx',function(data){
return xxxxx;
});
.........
});
[/code]

在这种情况下想获取$.get方法中回调函数的return的话就很困难,其实我们可以换种方法来解决这个问题,为何不把data的数据提交到回调函数以外的地方进行处理,这样就会避免内层的数据无法向外层传递。

查看jquery手册发现有一种比较好的解决方案:

[code="js"]
var str = $.ajax({url:xxxx,type:'GET',async:false,cache:false}).responseText;
[/code]

这样就可以通过ajax来获取返回值,注意这里使用了async:false  jQuery中的解释是:

 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

Jul8

避免onDbClick事件触发时不触发onClick事件

Author: leeon  Click: 6539   Comments: 0 Category: javascript  Tag: ondbclick,onclick

避免触发ondbclick的时候触发onclick,可以利用javascript延迟的机制来实现。

思路如下:

 1、声明一个全局的计时器变量如:clickTimer
 2、在代理单击事件里设置计时器,默认220毫秒之后触发真正的单击事件处理函数
 3、在双击事件里判断计时器变量,如果该变量不为NULL,则说明在触发该双击事件前触发了单击事件,取消计时器,因为真正的单击事件处理函数在220毫秒之后才会触发,所以在这个时候结束定时器,则真正单击事件处理函数不会被执行。

[code="js"]
var timerClick=null;
//单击事件代理
function _onNodeClick(id){
//onNodeClick才是真正的单击事件处理函数
timerClick=window.setTimeout("onNodeClick('"+id+"')",220);
}
//双击事件处理函数
function _onNodeDbClick(id){
if(timerClick){
window.clearTimeout(timerClick);
}
}
[/code]

分类

标签

归档

最新评论

Abyss在00:04:28评论了
Linux中ramdisk,tmpfs,ramfs的介绍与性能测试
shallwe99在10:21:17评论了
【原创】如何在微信小程序开发中正确的使用vant ui组件
默一在09:04:53评论了
Berkeley DB 由浅入深【转自架构师杨建】
Memory在14:09:22评论了
【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)
leo在17:57:04评论了
shell中使用while循环ssh的注意事项

我看过的书

链接

其他

访问本站种子 本站平均热度:8823 c° 本站链接数:1 个 本站标签数:464 个 本站被评论次数:94 次