zoukankan      html  css  js  c++  java
  • javascript事件笔记

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>javascript中的事件知识</title>
    <style type="text/css">
    *
    {margin:0; padding:0}
    body
    {font-size:12px; font-family:Arial}
    ul
    {list-style-type:none;}

    #oDiv
    {height:100px; width:100px; background:red;}

    </style>
    <script type="text/javascript">
    /*
    //IE下的事件是冒泡型事件
    //DOM标准用的是捕获型事件
    //事件是用户或浏览器自身进行的特定行为,这些事件都有自己的名字,如click,load,mouseover。
    //用于响应某个事件而调用的函数称为事件处理函数(event handler),或者DOM称为事件监听函数(event listener)

    */
    //如果在HTML代码中分配事件处理函数,(事件处理函数大小写都可以,如下面的onclick)
    //
    <div onlick="alert('点击');"></div>


    window.onload
    =function(){
    var fnClick=function(){
    alert(
    "Clicked!");
    }
    //在IE中,每个元素和window对象都有两个方法:attachEvent()和detachEvent()
    var oDiv=document.getElementById("oDiv");
    //oDiv.attachEvent("onclick",fnClick); //为oDiv添加onclick
    //删除事件则用detachEvent()
    //oDiv.detachEvent("onclick",fnClick);
    //用attachEvent方式可以添加多个事件处理函数,不会覆盖提前面的(包括在HTML里写的onclick)
    var fnClick2=function(){
    alert(
    "Also Clicked!");
    }
    //书中说是会先执行fnClick, 但我在IE浏览器中的测试则是先显示的 Also Clicked! ????
    //oDiv.attachEvent("onclick",fnClick2);


    //DOM标准中对应的则是用addEventListener()和removeEventListener()来添加和移除事件处理函数
    //不过它们要多一个第三个参数(bool型), 主要用来区分是冒泡还是捕获
    //oDiv.addEventListener("click",fnClick,false); //注意没有on前缀, false表示冒泡
    //oDiv.addEventListener("click",fnClick2,false); //在FF中倒是先显示的Clicked
    //另外注意,在删除事件处理函数,第三个参数的bool值要同添加的时候一致,不然将不会删除
    //如上面添加时用的false,则删除时也要用false
    //oDiv.removeEventListener("click",fnClick,false);



    //事件对象
    //在IE中事件对象是window对象的一个属性event,事件处理函数必须这样访问
    //尽管它是window对象的属性,但它还是只能在事件发生时访问,所有的事件处理函数执行完毕后,事件对象就被销毁
    oDiv.onclick=function(){
    var oEvent=window.event;
    }
    //IE下event常用属性方法记录
    /*
    cancelBubble 将其设为true则会停止事件向上冒泡
    clientX,clientY 事件发生时,鼠标在客户端的区域(不包含工具栏,滚动条等)
    fromElement 某些鼠标事件中,鼠标所离开的元素
    keyCode 对于keypross事件,表示按下按钮的Unicode字符(如按下Enter为13)
    offsetX,offSetY 鼠标相对于引起事件的对象的x,y坐标
    returnValue 一般设置false来取消事件的默认动作,常用于a上面,使其不不跳转
    screenX,screenY 鼠标相对于整个计算机屏幕的x,y坐标
    srcElement 引起事件的元素
    toElement 在鼠标事件中,鼠标正在进入的元素
    type 事件的名称
    x,y 鼠标相对于引起事件的元素的父元素的x,y坐标
    */
    //DOM标准 与IE不同的
    /*
    charCode 按下的按键的Unicode值
    currentTarget 事件目前所指向的元素
    keyCode 按下的按键的数字代号
    pageX,pageY 鼠标相对于页面的x,y坐标
    preventDefault 阻止事件的默认行为
    stopProgation() 调用该方法来阻止事件的冒泡
    target 引起事件的元素
    */
    }
    function keyDown(evt) //是否按下回车的兼容处理,主要是FF下有些麻烦
    {
    evt
    =evt||window.event; //首先这里处理事件的兼容
    var keyCode=evt.keyCode?evt.keyCode:evt.which?evt.which:evt.charCode;
    /*
    键盘事件的event对象中包含一个keyCode属性,IE中只有这一个属性,当为keydown和keyup 事件时,
    keyCode属性表示你具体按下的键(也称为virtual keycode),
    当捕捉的是keypress事件时keyCode属性指的是你键入的字符(character code)(Unicode)

    在firefox中情况有些不同,event对象包含一个keyCode属性和一个charCode属性,
    keydown和keyup事件的时候,keyCode表示的就是你具体按的键,charCode为0;当捕捉的是keypress事件时,
    keyCode为0,charCode指的是你按下的字符

    经过测试在firefox下: 按下Enter键时: charCode:0 which:13 keyCode:13
    按下Tab键时 charCode:0 which:0 keyCode:9
    按下普通字符键如a charCode:97 which:97 keyCode:0
    头晕了,索性全部都写上(好像which除了按tab时是0外,其它的值都与IE相同)
    */
    //alert(keyCode);
    if(keyCode==13)
    {
    alert(
    "你按下了Enter键!");
    }
    }
    //格式化event对象
    EventUtil={};
    EventUtil.formatEvent
    =function(evt){
    //如果是IE, 这里直接用了这种简单的检测,因为Firefox不支持document.all
    //检测浏览器有对象检测,浏览器检测等方式, 对象检测比较简单
    if(document.all) //IE 支持document.all
    {
    evt.pageX
    =evt.clientX+document.body.scrollLeft;
    evt.pageY
    =evt.clientY+document.body.scrollTop;
    evt.preventDefalut
    =function(){ //取消默认行为
    this.returnvalue=false;
    }
    if(evt.type=="mouseout){
    evt.relatedTarget=evt.toElement;
    }else if(evt.type==
    "mouseover"){
    evt.relatedTarget=evt.fromElement;
    }
    evt.stopPropagation=function(){ //取消事件冒泡
    this.cancelBubble=true;
    }
    }
    return evt;
    }
    EventUtil.getEvent=function(){
    if(window.event){
    return this.formatEvent(window.event);
    }else{
    return EventUtil.getEvent.caller.arguments[0];
    }
    }
    </script>
    </head>
    <body>
    <div id=
    "oDiv">
    <input type=
    "text" id="txtKey" onkeypress="keyDown(event)" />
    </div>
    </body>
    </html>

  • 相关阅读:
    【转】[fix] Wireshark error: There are no interfaces on which a capture can be done. on Mac OS X
    【转载】Linux 文件系统的目录结构
    postgreSQL使用
    [转载] Linux启动过程详解-《别怕Linux编程》之八
    冒泡排序
    java值类型和引用类型
    冒泡排序法与二分查找法
    关系型数据库
    SQList的建表并添加数据练习
    数据存储——SQLite数据库存储
  • 原文地址:https://www.cnblogs.com/jancyxue/p/2164012.html
Copyright © 2011-2022 走看看