阻止Javascript事件的默认行为
这几天,因为一个项目中的bug而头痛。
这是一个条码扫描程序,为了保证扫描工作的连续性,在页面中利用
Javascript自动捕获keydown事件,因为条码扫描枪在完成一次扫描任务后会触发回车键,所以,在keydown事件中判断是否
keyCode==13,然后触发页面中一个隐藏的按钮,提交此数据保存至服务器。
程序中,为条码输入文本框注册了类似这样的脚本:
if(event.keyCode==13){
document.getElementById('buttonClientID').click();
}
因
为开始时系统并未要求对条码进行校验,所以问题没有暴露,直到后来系统升级,对扫入的条码进行各种合理性判断,才发现有些不太对头。数据似乎进行了两次保
存,但页面看起来只做了一次回滚,所以,第一反应是服务器端的代码问题。但问题怪就怪在这里,提交数据的服务器代码是一个事务,要么成功,要么失败回滚,
但数据却是被成功保存了的,这让我百思不得其解。在花了大量时间对服务器代码进行改造却毫无进展之后,还是把目标放在了客户端,因为通过测试也能确定数据
有被重复提交的迹象。
经过大量的尝试后,终于找到了问题所在,原来,这和浏览器的事件处理模型有关。为了简化,这个
程序被限制在IE下工作。在IE中,响应一个事件的并非只有一个元素,处理的方法是所谓冒泡型事件,也就是从最特定的事件到最不特定的事件目标的顺序进行
触发,也就是按照DOM的层次结构不断地上升到顶端,这个概念被称作事件流。所以,在本程序中,扫描枪触发的回车事件,除了会执行JS指定的动作之外,还
会默认有其它一些元素去响应它,具体会触发哪些动作和页面布局有关。这种情况类似于在填写表单的时候,有些用户(特别是常用Excel的财务人员)会在填
写完一个文本框后习惯性地按下回车以换行,如果,未针对这种情况进行处理的话,很可能会触发提交表单的事件。对于直接键盘输入的程序很容易想到这个问题,扫描枪这种输入设备平时较少用到,晕。
解决的方法很简单,就是在脚本中加上这样一段代码:
event.returnValue=false;
这是在IE下,如果是Mozilla,则要调用preventDefault()方法。
这样,就能够阻止该事件的默认行为,而只去执行指定的动作。
经测试,Bug死了,程序活了。
******
相关文档:
javascript的parseInt函数
javascript的parseInt函数,大家都知道是干啥的
但你知道
parseInt("07") 返回多少 ?
parseInt("08") 又返回多少 ?
正确答案是
parseInt("07") 返回8
parseInt("08") 返回0
你知道问题在哪?
其实,这个问题可能大家都没想过吧。
用javascript的parseInt函数时,
parseInt("08") ......
今天小编和大家探讨的是JavaScript中自定义函数的用法,下面示例中的 Checktriplet 函数以三角形的边长为参数。通过查看三条边的长度是否可以组成一个毕达哥拉斯三元组(直角三角形斜边长度的平方等于其他两条边长的平方和)来计算该三角形是否为直角三角形。实际测试时 checkTriplet 函数要调用另两个函数中的一个函数。
......
作者:
YITU.org
来源:
YITU.org
时间:
2007-02-26 10:34:58
有时我们需要在客户端获取链接参数,一个常见的方法是将链接当做字符串,按照链接的格式分解,然后获取对应的参数值。本文给出的就是这个流程的具体实现方法。
当然, ......
null, undefined
相同:
当一个变量的值是null, undefined时,表示:我们声明并定义了一个变量,仅仅是这个变量的值是null, undefined.
被调用者:
将null, undefined作为参数传入"JavaScript内置函数"时,不会出现异常,内置函数返回:null -> null, undefined->undefined
但typeof函数除外。
调 ......
源程序:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JavaScript字符串中的字符数组&l ......