`
lmh2072005
  • 浏览: 111735 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

onkeydown onkeypress onkeyup

 
阅读更多

$("#abc").keydown(function(){

return false;

})

上面这行代码在opera10下面居然没起作用,其它浏览器都可以。onkeydown在opera下没办法阻止浏览器默认行为吗??

本来是为了在input输入框只能输入数字,就用了onkeydown,结果opera10下不起作用

<input type="text" value="" id="a"/>

 

<script type="text/javascript">

 

 

 

 

 

if(window.attachEvent){

$("a").attachEvent("onkeydown",checknum)

}else{

$("a").addEventListener("keydown",checknum,false);}

function checknum(e){

if((e.keyCode>47 && e.keyCode<58) || (e.keyCode>95 && e.keyCode<106) || e.keyCode == 8){

 

     //do some thing

}

else{

if (e.preventDefault) {

e.preventDefault();

} else {

window.event.returnValue = false;

}

 

}

}

function $(id){

return document.getElementById(id) || id;

}

</script>

很纠结,查了很久,发现网上也有人遇到这种问题,后来有人建议用onkeypress代替。试了下,onkeypress貌似还真的可以,不过有些地方需要注意的,不同浏览器捕获onkeypress事件时有些不一样。具体参考了下这位哥哥的博文:http://quicker.iteye.com/blog/586646

可是这keycode就和原来的不一样了怎么办呢,后来看到了这篇文章:

 

I am trying to validate textbox for numeric entry, while I added this code to accomplish in page_load event:

textbox.Attributes.Add("onkeypress""return (window.event.keyCode == 45 || window.event.keyCode == 13 || window.event.keyCode == 8 || window.event.keyCode == 9 || window.event.keyCode == 189 || window.event.keyCode == 109 || (window.event.keyCode >= 48 && window.event.keyCode <= 58) )");

It worked fine in IE7 and IE8, but it didnt work for FF though. A bit googling gave me conclusion that FF doest recognize window.event.keyCode.Basically Firefox supports the which property instead of the keyCode property IE does. By checking which (window.event.which) of them exists with an if statement we can reliably get the key that was pressed.

I replaced above code with:

textBox.Attributes.Add("onkeypress""var key; if(window.event){ key = event.keyCode;}else if(event.which){ key = event.which;} return (key == 45 || key == 13 || key == 8 || key == 9 || key == 189 || (key >= 48 && key <= 58) )");


onkeypress无法区分小键盘,所以checknum改了下

function checknum(e){

var key;

if(window.event){

key = event.keyCode;

}else{

key = e.which;

}

if((key>47 && key<58)|| key == 8){

console.log(key)

}

else{

if (e.preventDefault) {

e.preventDefault();

} else {

window.event.returnValue = false;

}

}

}

还有点问题,在ie,firefox下面可以设置input样式 ime-mode:disabled; 而其它的浏览器不支持这个样式,所以在切换语言到中文或其它语言的时候,比如搜狗拼音,输入中文拼音的时候再按shift或space键,则字母或汉字就可以出现在input里面。这时只能加一个方法了。我这里加了一个onkeyup,就替换input的值。

$("a").attachEvent("keyup",replacenum);

$("a").addEventListener("keyup",replacenum,false);

 

function replacenum(){

this.value = this.value.replace(/[^\d]/g,'');

}

本以为这样应该ok了吧,opera居然在输入中文按下shift或space时屏蔽了keyup事件。很无语啊。看来又得为opera单独弄个方法了,想来想去没找到个好方法,就用setInterval在input获得焦点时每隔50毫秒去检测input的值,然后进行替换。失去焦点时再clearInterval.

最后再给input加上onpaste="return false;"防止粘贴。

分享到:
评论

相关推荐

    onkeypress和onkeydown以及onkeyup的区别

    onkeypress和onkeydown以及onkeyup的区别onkeypress和onkeydown以及onkeyup的区别onkeypress和onkeydown以及onkeyup的区别

    onkeyup,onkeydown和onkeypress的区别介绍

    三者在事件的响应上还有一点不同,就是onkeydown 、onkeypress事件响应的时候输入的字符并没有被系统接受,而响应onkeyup的时候,输入流已经被系统接受

    javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick

    昨天群里面的朋友问了个比较有意思的问题,keydown,keyup,keypress事件的先后顺序。

    javascript-event-keycode-finder:找出javascript的OnKeyDown,OnKeyUp和OnKeyPress事件调用的键码的简单工具

    Javascript事件键码查找器 找出javascript的OnKeyDown,OnKeyUp和OnKeyPress事件调用的键码的简单工具。 现场演示: :

    JavaScript语言参考手册

    onKeyPress onKeyUp onLoad onMouseDown onMouseMove onMouseOut onMouseOver onMouseUp onMove onReset onResize onSelect onSubmit onUnload 第十章 LiveWire 数据库服务 本章包含了服务器端与 LiveWire 关联的...

    浅析OnKeyPress事件和OnKeyDownOnKeyUp事件

    浅析OnKeyPress事件和OnKeyDown、OnKeyUp事件

    html鼠标事件整理

    个人整理的html所有的鼠标事件及方法:onblur 、onclick 、ondblclick 、onfocus 、onkeydown 、onkeypress 、onkeydown 、onKeyUp 、onmousedown 、onmousemove 、onmouseout 、onmouseover 、onmouseup ...

    如何改变“behaviors”的缺省事件?

     *" onDblClick="" onKeyDown="" onKeyPress="" onKeyUp="" onMouseDown="" onMouseOut="" onMouseOver="" onMouseUp=""&gt;  将“ onClick="*" ”中的“*”移到“ onMouseOver="" ”中,改为: ...

    AlphaControls_12.13_Stable

    * Added OnEnter, OnExit, OnKeyDown, OnKeyPress and OnKeyUp events in arc controls * Added OnSetTextFromValue and OnSetValueFromText events in the TsTrackEdit component * Added OnDropDown and ...

    javascript中键盘事件用法实例分析

    键盘事件包含onkeydown、onkeypress和onkeyup这三个事件 事件初始化 function keyDown(){} [removed] = keyDown; //论按下键盘上的哪个键,都将调用KeyDown()函数。 DOM标准下 function keyDown(e) { var ...

    浅谈js键盘事件全面控制

    用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown、 onkeypress和onkeyup这三个事件句柄。一个典型的按键会产生所有这三种事件,依次是keydown,keypress,...

    js 键盘记录实现(兼容FireFox和IE)

    用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown、onkeypress和onkeyup这三个事件句柄。一个典型的按键会产生所有这三种事件,依次是keydown,keypress,...

    浏览器事件大全.txt

    一般事件 ...onkeypress IE4、N4 当键盘上的某个键被按下并且释放时触发此事件. onkeydown IE4、N4 当键盘上某个按键被按下时触发此事件 onkeyup IE4、N4 当键盘上某个按键被按放开时触发此事件

    PHP100视频教程 50: Ajax+PHP检查用户名或邮件(三)

    onkeydown 事件会在用户按下一个键盘按键时发生。onkeypress 事件会在键盘按键被按下并释放一个键时发生。onkeyup 事件会在键盘按键被松开时发生。onmousedown 事件会在鼠标按键被按下时发生。onmousemove 事件会在...

    Html事件列表

    onKeyPress HTML: 当键盘上的某个键被按下并且释放时触发的事件.[注意:页面内必须有被聚焦的对象] onKeyDown HTML: 当键盘上...onKeyUp HTML: 当键盘上某个按键被按放开时触发的事件[注意:页面内必须有被聚焦的对象]

    事件高级用法及兼容写法

    键盘事件:onkeydown onkeyup onkeypress 键盘事件的属性: key 在IE中不支持 键名称 keyCode 键码 滚轮事件: Onwheel 标准浏览器和IE 对象.addEventListener(“DOMMouseScroll”,事件函数,false) 火狐 滚轮事件对...

    js事件总结

    列出一部分: ...onDblClick IE4|N4|O 鼠标双击事件 onMouseDown IE4|N4|O 鼠标上的按钮被按下了 onMouseUp IE4|N4|O 鼠标按下...onKeyUp IE4|N4|O 当键盘上某个按键被按放开时触发的事件[注意:页面内必须有被聚焦的对象]

    onmouse事件总结

    onKeyPress IE4|N4|O 当键盘上的某个键被按下并且释放时触发的事件.[注意:页面内必须有被聚焦的对象] onKeyDown IE4|N4|O 当键盘上某个按键被按下时触发的事件[注意:页面内必须有被聚焦的对象] onKeyUp IE4|N4|O 当...

Global site tag (gtag.js) - Google Analytics