• 关于JavaScript 的事件[下]


     

    上篇:关于JavaScript 的事件[上]

     

    C  事件对象

    i >  在IE 浏览器中,事件对象是window 对象的一个属性event 。访问方式如下:

    function getEvent(){
      var o_event = window.event;
    }

    event 对象在事件发生时被访问,执行完函数后就消失了。

     

    ii >  在标准的DOM 中,事件对象是作为处理函数的唯一参数来获得。访问方式如下:

    function getEvent(_event){
       var o_event = _event
    }

    因此,为了兼容各种浏览器,通常采用如下方法:

    function getEvent(_event){
      // Firefox下参数_event 就是event对象 
     
      // IE 下获得 event对象 
      if(window.event)_event = window.event;
     
      // 显示触发的事件名称
      alert(_event.type);
    }

    下面列出了事件常用的几个属性和方法(区别):

    IE 标准DOM 说明
    cancelBubble cancelBubble 是否冒泡(标准DOM中只读)
    stopPropagation( ) 阻止事件向上冒泡的方法
    charCode 按下按键的Unicode 值
    keyCode keyCode IE 中keypress 事件时表示按键的Unicode 值;
    标准DOM 中keypress 事件时为0;
    其余情况下,keyCode 为按键的数字代号。
    srcElement target 触发事件的元素(对象源)
    type type 事件的名称

    此处只列出了事件成员的一小部分。

    注意:

    在IE 浏览器中,获得触发事件的对象源(HTML标签)是通过event 对象的srcElement 属性;

    在标准的DOM 中,获得触发事件的对象源(HTML标签)是通过event 对象的target 属性;

    获取事件目标的示例:

    <html>
    <head>
    <title>事件的目标</title>
    <script language="javascript">
    function handle(oEvent){
        //处理兼容性,获得事件对象
        if(window.event) oEvent = window.event;
     
        var oTarget;
        //处理兼容性,获取事件目标
        if(oEvent.srcElement)
             oTarget = oEvent.srcElement;
        else oTarget = oEvent.target;
        
        //弹出目标的标记名称
        alert(oTarget.tagName);       
    }
    window.onload = function(){
        var obj = document.getElementsByTagName("a")[0];
        obj.onclick = handle;
    }
    </script>
    </head>
    <body>
        <a href="#">获得事件源的示例</a>
    </body>
    </html>

     

    D  键盘事件

    事件 说明
    keydown 按下键盘上的某个键触发。(一直按住某键则会持续触发
    keypress 按下某个按键并产生字符时触发。(即忽略Shift 、Alt 、Ctrl 等功能键
    keyup 释放某个按键时触发。

    触发的顺序为:keydown ---> keypress ---> keyup

    i >  关于keyCode属性和charCode 属性

    keyCode属性:  表示键盘按键码。因此输入“a”字母和“A”字母时,都是显示键盘码 65 ;

    charCode 属性:表示输入字符码。因此输入“a”字母和“A”字母时,

                                     分别显示 97(a 字符码)和 65(A 字符码);

    注意:

    在标准的DOM 中:既有keyCode属性,还有charCode 属性。

            但在标准的DOM 中,keypress 事件中keyCode 属性值始终为0 值;

     

    IE 浏览器中:事件对象只有keyCode属性,没有charCode 属性。

            但在IE 浏览器中,keypress 事件中的keyCode 属性值等同于标准DOM 中的charCode 属性的值;

    示例代码:

    <html>
    <head>
    <title>键盘事件</title>
    <script language="javascript">
    function handle(oEvent){
     
        if(window.event){
            //处理兼容性,获得事件对象
            oEvent = window.event;
     
            //设置IE的charCode值
            oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
        }
        var oDiv = document.getElementById("display");
        //输出测试
        oDiv.innerHTML += oEvent.type               // 事件名称
          + ": charCode:" + oEvent.charCode         // 字符码 charCode
          + " keyCode:" + oEvent.keyCode + "<br>";  // 键盘码 keyCode
    }
    window.onload = function(){
        var oTextArea = document.getElementsByTagName("textarea")[0];
        oTextArea.onkeypress = handle;
        oTextArea.onkeydown = handle;
    }
    </script>
    </head>
    <body>
        <textarea rows="4" cols="50"></textarea>
        <div id="display"></div>
    </body>
    </html>

     

    ii >  屏蔽鼠标右键

    方法一:

    通过鼠标事件中,判断event 对象的button 属性值为“2”来屏蔽鼠标右键。虽然这种方法在IE 浏览器中有效,但在标准的DOM 中无效。并且,鼠标事件中,button 属性的值在IE 浏览器和标准的DOM 中大部分都不相同!

     

    方法二:

    其实,点击鼠标右键会触发右键菜单contextmenu 事件。

    所以,屏蔽鼠标右键最有效的办法就是屏蔽document 对象的contextmenu 事件。

    代码如下:

    <html>
    <head>
    <title>屏蔽鼠标右键</title>
    <script language="javascript">
    function block(oEvent){
        if(window.event){
            oEvent = window.event;
     
            // IE 取消默认事件
            oEvent.returnValue = false;
        }
        else
            // Firefox 取消默认事件
            oEvent.preventDefault();
    }
    // 右键菜单事件
    document.oncontextmenu = block;
    </script>
    </head>
    <body>
        <p>屏蔽鼠标右键</p>
    </body>
    </html>

    IE 浏览器是通过returnValue 属性屏蔽右键菜单;

    标准DOM 是通过preventDefault( ) 方法屏蔽右键菜单;

    iii > 自定义鼠标右键菜单

    代码如下:

    <html>
    <head>
      <title> demo </title>
      <meta name="Author" content="xugang" />
      <script type="text/javascript">
      <!--
        // 一、屏蔽系统右键菜单
        window.document.oncontextmenu = function(_event){
           if (window.event){
             _event = window.event;
             window.event.returnValue=false;
             window.event.cancelBubble=true;
           }
           else _event.preventDefault();
        }
     
        //二、添加自定义右键菜单
        window.document.onmouseup = function(_event)
        {
           var myDIV = document.getElementById("myDIV");
           // 浏览器兼容性
           if (window.event)_event = window.event;
      
           // 鼠标右键
           if(_event.button == 2)
           {
               // _event.clientX 获得鼠标当前的 X 坐标
               /* 注意:
                  _event.clientX 的值在标准的DOM 中“只读”
                  myDIV.style.pixelLeft 不是标准的DOM 属性
               */
               myDIV.style.left = _event.clientX;
               myDIV.style.top = _event.clientY;
               myDIV.style.display = "block";
           }
           // 不是鼠标右键
           else myDIV.style.display = "none"; 
        }
      //-->
      </script>
    </head>
    <body>
    <!-- 我的右键菜单 -->
     <div id="myDIV" style="position:absolute; height:180px; 200px; 
          background-color:#CCCCCC; display:none;">
        <a href="http://xugang.cnblogs.com" target="_blank">xugang</a>
    </div>
    </body>
    </html>

    在IE 浏览器和标准DOM 下兼容。

     

    作者: XuGang   网名:钢钢
    出处: http://xugang.cnblogs.com
    声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!
  • 相关阅读:
    函数的扩展
    数组的扩展
    event(1)
    面试
    iframes
    浏览器CSS兼容
    BFC
    简单的一个轮播效果
    asp.net identity 2.2.0 在WebForm下的角色启用和基本使用(二)
    我的web框架设计
  • 原文地址:https://www.cnblogs.com/xugang/p/1795612.html
Copyright © 2020-2023  润新知