当前位置: 首页 > news >正文

关于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说明
cancelBubblecancelBubble是否冒泡(标准DOM中只读)
stopPropagation( )阻止事件向上冒泡的方法
charCode按下按键的Unicode 值
keyCodekeyCodeIE 中keypress 事件时表示按键的Unicode 值;
标准DOM 中keypress 事件时为0;
其余情况下,keyCode 为按键的数字代号。
srcElementtarget触发事件的元素(对象源)
typetype事件的名称

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

注意:

在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; width:200px;
background-color:#CCCCCC; display:none;">
<a href="http://xugang.cnblogs.com" target="_blank">xugang</a>
</div>
</body>
</html>

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




本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2010/08/09/1795612.html,如需转载请自行联系原作者

相关文章:

  • table-layout
  • 双系统引导故障排除
  • python 守护进程(daemon)
  • Gradle与Makefile构建工具的对比
  • 如何读取Access里的OLE类型的图片
  • 让全世界的中小企业都可以用上的全方位上网行为管理系统。
  • 20171127-构建之法:现代软件工程-阅读笔记
  • Mysql实现企业级主从复制和互为主从模式架构
  • topcoder srm 495 div1
  • sbt编译spark程序提示value toDF is not a member of Seq()
  • 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 开发流程...
  • 文本处理工具
  • 关于栈和队列随想
  • HBase Client API 简析
  • 学倦乱语
  • ----------
  • Brief introduction of how to 'Call, Apply and Bind'
  • classpath对获取配置文件的影响
  • echarts花样作死的坑
  • ES10 特性的完整指南
  • IDEA常用插件整理
  • Nodejs和JavaWeb协助开发
  • Vue ES6 Jade Scss Webpack Gulp
  • windows下mongoDB的环境配置
  • 阿里云应用高可用服务公测发布
  • 闭包,sync使用细节
  • 产品三维模型在线预览
  • 利用jquery编写加法运算验证码
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 排序(1):冒泡排序
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何利用MongoDB打造TOP榜小程序
  • 使用 @font-face
  • 算法-图和图算法
  • - 转 Ext2.0 form使用实例
  • 阿里云ACE认证之理解CDN技术
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #define、const、typedef的差别
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (4.10~4.16)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (libusb) usb口自动刷新
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (二十四)Flask之flask-session组件
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (剑指Offer)面试题34:丑数
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (一)插入排序
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)