注册 登录
编程论坛 JavaScript论坛

事件与 事件处理器之间问题

於晓琪123 发布于 2015-08-04 00:09, 1449 次点击
由一个例子引发的 我的疑问
要求:文本框只能输入数字  其他字符打不进去
主体代码:
   function checkNum(){
    if (window.event.keyCode>=48 &&window.event.keyCode<=57){
      }else{
        return false }         
}
<input type="text" onkeyDown="return checkNum()">
事件处理器是看书上说的,书上的意思就是为相应javascipt的事件处理代码 这些标签都增加 相应事件的属性——事件处理器
那么我的问题是;
1.对于onkeyDown这个属性是不是它不完全只是一个事件,它其实也做了相应的事件处理,比如说把敲的字符输入到文本框。而就这题而言 是不是我在后面给属性赋的值其实是加在这个事件 本身就写好了的一个事件处理代码里,而且还是插在输入字符到文本框这部分代码之前。
2.既然onkeyDown 不仅仅是一个事件 它还进行了输入字符的处理  那么向其他的 onclick dbclick 之类的是不是也有自己本身的一个处理,而我们在后面赋值的这些js代码又是怎么跟本身处理的代码联系的??两者间是如何协调运行的??
4 回复
#2
於晓琪1232015-08-04 00:10
是不是有点繁琐  希望有人来帮我解释一下 很想知道底层是怎么运行的
#3
wangnannan2015-08-04 14:33
LZ这个问题问的好 很难得 好久没有这样的帖子 LZ是想知道javascript事件机制底层实现原理 我得建议是这种你需要鼓起勇气去研究chrome源码 有你想知道的答案
#4
jsRank2015-08-04 15:27
浏览器本身是一个c/s架构的系统,chrome,safari等都是用c++进行编写的。关于事件处理部分,涉及到跟系统内核的消息通信,系统内核对外都提供了应用程序编程接口(也就是API)。键盘事件,鼠标事件都有对应的API。
当文本框获取焦点,并开始敲击键盘,操作系统就会向应用程序发送一个按键被按下的消息,浏览器捕获该消息,并将该消息(浏览器内部会对该消息数据进行处理,转换,封装)回传给事件监听函数。
例如:
onkeydown="a()";
键盘按下产生消息message,操作系统根据当前焦点所在的窗口window,将message传递给浏览器,浏览器将消息message处理成js可以识别的事件对象event,接下来浏览器就调用onkeydown属性a函数,将event对象赋值给a的参数或将event对象赋给window对象。
不同浏览器不同版本对此处理不同。

其中曲折相当复杂
#5
於晓琪1232015-08-05 21:15
回复 4楼 jsRank
谢啦
1