关于《JavaScript从入门到精通》的例题的疑惑
发表在JavaScript答疑区 2015-04-12
是否精华
版块置顶:
明日科技的老师:
    您好!
    关于《JavaScript从入门到精通》第63页例题4.6我有四点疑问。该例题源代码如下:

<!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>屏蔽鼠标右键和键盘相关事件</title>
<link rel="stylesheet" href="../../../../javascript(04)/07/CSS/style.css">
<script language="javascript">
function maskingKeyboard() {
if(event.keyCode==8){  //判断是否为退格键
      event.keyCode=0;
      event.returnValue=false;
      alert("当前设置不允许使用退格键");
  }
  if(event.keyCode==13){ //判断是否为回车键
      event.keyCode=0;
      event.returnValue=false;
      alert("当前设置不允许使用回车键");
  }
  if(event.keyCode==116){ //判断是否为F5
      event.keyCode=0;
      event.returnValue=false;
      alert("当前设置不允许使用F5刷新键");
  }
  if((event.altKey)&&((window.event.keyCode==37)||(window.event.keyCode==39))){ //判断是否为Alt+方向键←或方向键→
      event.returnValue=false;
      alert("当前设置不允许使用Alt+方向键←或方向键→");
  }
  if((event.ctrlKey)&&(event.keyCode==78)){ //判断是否为Ctrl+N
      event.returnValue=false;
      alert("当前设置不允许使用Ctrl+N新建IE窗口");
  }
  if((event.shiftKey)&&(event.keyCode==121)){ //判断是否为shift+F10
      event.returnValue=false;
      alert("当前设置不允许使用shift+F10");
  }
}
//屏蔽鼠标右键
function rightKey(){
if(event.button==2){ //判断是否按下的是鼠标右键
event.returnValue=false;
alert("禁止使用鼠标右键!");
}
}
document.onmousedown=rightKey; //当鼠标键被按下时,调用rightKey函数
</script>
</head>

<body onkeydown="maskingKeyboard()">
<center>
欢迎访问明日科技网站<br>http://www.mingribook.com
</center>
</body>
</html>

    我的问题是:
    1、对于屏蔽键盘事件,如果在页面上点击了鼠标,不管是左键还是右键,都将不再生效。比如屏蔽回车键,在页面上点击鼠标之后,屏蔽就不起作用了。这是为什么?
    2、调用rightKey函数,为什么是rightKey,而不是rightKey()?如果写成rightKey(),对鼠标右键的屏蔽将失效。
    3、对maskingKeyboard函数的调用,为什么要放在<body>标签内?如果拿到外面,该怎么写?
    4、对maskingKeyboard函数的调用,为什么要加双引号?

    谢谢老师!
分享到:
精彩评论 5
无语_mrkj
学分:3155 LV11
2015-04-13
沙发
(1)您可以在<html>标记中再添加一个onkeydown属性,修改后的代码如下:
<html xmlns="http://www.w3.org/1999/xhtml"  onkeydown="maskingKeyboard()">
(2)这里是要为document.onmousedown指定一个响应函数,所以不能加括号,如果加括号就执行这个函数了,相当于为document.onmousedown指定一个具体的值了。
(3)这是要为<body>添加一个键盘按下的事件监听器,所以需要写在标签内。
(4)这里的这个双引号是为onkeydown设置属性值的。
lchydp
学分:0 LV1
TA的每日心情
开始
2020-03-08 17:13:27
2015-04-26
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
(1)您可以在<html>标记中再添加一个onkeydown属性,修改后的代码如下:
<html xmlns="http://www.w3.org/1999/xhtml"  onkeydown="maskingKeyboard()">
(2)这里是要为document.onmousedown指定一个响应函数,所以不能加括号,如果加括号就执行这个函数了,相当于为document.onmousedown指定一个具体的值了。
(3)这是要为<body>添加一个键盘按下的事件监听器,所以需要写在标签内。
(4)这里的这个双引号是为onkeydown设置属性值的。
[/FIELDSET]

回复:
    谢谢老师!但是对于问题1,为什么按下鼠标后,对键盘的屏蔽就失效了呢?
  
无语_mrkj
学分:3155 LV11
2015-04-27
地板
这问题应该是原来的代码把捕捉键盘事件的代码写在<body>上了,当按下鼠标以后,当前页面的焦点就不在<body>上了,所以这个捕捉事件也就不好使了。
lchydp
学分:0 LV1
TA的每日心情
开始
2020-03-08 17:13:27
2015-05-02
4L
[FIELDSET][LEGEND]引自:3楼[/LEGEND]
这问题应该是原来的代码把捕捉键盘事件的代码写在<body>上了,当按下鼠标以后,当前页面的焦点就不在<body>上了,所以这个捕捉事件也就不好使了。
[/FIELDSET]

回复:哦,谢谢老师!
  
无语_mrkj
学分:3155 LV11
2015-05-04
5L
不用客气。
首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照