• 全部
...

javascript如何模拟键盘按下

tyroOfJava 2009-10-22 03:12:07
需要写一个js方法:escKeyPress()。这个方法用于模拟按下键盘上的ESC键,我现在有一个模拟鼠标左键单击的js方法,

  1. function doClick(linkId){

  2. var fireOnThis = document.getElementById(linkId);

  3. if (document.createEvent)
  4. {
  5. var evObj = document.createEvent('MouseEvents');
  6. evObj.initEvent( 'click', true, false );
  7. fireOnThis.dispatchEvent(evObj);
  8. }
  9. else if (document.createEventObject)
  10. {
  11. fireOnThis.fireEvent('onclick');
  12. }
  13. }

是从网上找的,但是本人太菜,搜了半天也弄不到模拟键盘点击的js方法,请求大虾帮忙!!
...全文
给本帖投票
21781 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
su0 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

Hi,
我写了个例子,在IE6和Firefox3.5中已经测试过. 你要是想支持其他浏览器需要查相应的文档。

用法:
创建一个新HTML文件,copy下面的内容进去就可以了
HTML code


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/D……
[/Quote]
19楼是大神,对于2012年的俺还是受用匪浅!
zorro1x1 2011-10-19
  • 打赏
  • 举报
回复
多谢19楼,多谢楼主提出的这个问题
aaaaa6 2011-06-02
  • 打赏
  • 举报
回复
jol_boy真是的,你管人家怎么做,既然这样做,肯定就有这样的需求,,就有想这样做的道理,你实现的了就帮忙,实现不了就拉倒,别实现不了还说别人的想法有问题
cqumomo 2009-11-19
  • 打赏
  • 举报
回复
顶19楼的。无语其他没看明白楼主问题瞎回答还鄙视楼主的。
觉得这个没用?!等你要用的时候你就明白了。
tyroOfJava 2009-10-30
  • 打赏
  • 举报
回复
哈哈 19楼的“chidaidl”同学的代码能运行! 太谢谢了!!!
tyroOfJava 2009-10-30
  • 打赏
  • 举报
回复
谢谢楼上的好心的同学们!
chidaidl 2009-10-25
  • 打赏
  • 举报
回复
Hi,
我写了个例子,在IE6和Firefox3.5中已经测试过. 你要是想支持其他浏览器需要查相应的文档。

用法:
创建一个新HTML文件,copy下面的内容进去就可以了


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Simulate Event </title>
<script type="text/javascript">
function simulateKeyEvent(target,
keyCode)
{

if (!target){
alert("Target is not exist");
}

var customEvent = null;
var a = typeof document.createEvent;

if(typeof document.createEvent == "function")
{
try {

//firefox
customEvent = document.createEvent("KeyEvents");
customEvent.initKeyEvent("keypress", true, true,window, false,
false,false, false, keyCode, keyCode);

} catch (ex){

document.write("Shit happends. This example is only demonstrating event simulation in firefox and IE.");
}
target.dispatchEvent(customEvent);

} else if (document.createEventObject){ //IE

customEvent = document.createEventObject();

customEvent.bubbles = true;
customEvent.cancelable = true;
customEvent.view = window;
customEvent.ctrlKey = false;
customEvent.altKey = false;
customEvent.shiftKey = false;
customEvent.metaKey = false;
customEvent.keyCode = keyCode;

target.fireEvent("onkeypress", customEvent);

} else {
document.write("This example is only demonstrating event simulation in firefox and IE.");
}
}


</script>
</head>
<body>
<input id="testinput" type="button" value="kick you"/>
</body>
<script type="text/javascript">


var target =document.getElementById("testinput");
target.onkeypress = function(event){
var event = (event)?event:window.event;
if(event.keyCode == 27){
alert('"ESC" pressed');
}
};
simulateKeyEvent(target,27);
</script>

</html>


chidaidl 2009-10-25
  • 打赏
  • 举报
回复
Hi,
我写了个例子,在IE6和Firefox3.5中已经测试过. 你要是想支持其他浏览器需要查相应的文档。

用法:
创建一个新HTML文件,copy下面的内容进去就可以了

--------------------------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Simulate Event</title>
<script type="text/javascript">
function simulateKeyEvent(target,
keyCode)
{

if (!target){
alert("Target is not exist");
}

var customEvent = null;
var a = typeof document.createEvent;

if(typeof document.createEvent == "function")
{
try {

//firefox
customEvent = document.createEvent("KeyEvents");
customEvent.initKeyEvent("keypress", true, true,window, false,
false,false, false, keyCode, keyCode);

} catch (ex){

document.write("Shit happends. This example is only demonstrating event simulation in firefox and IE.");
}
target.dispatchEvent(customEvent);

} else if (document.createEventObject){ //IE

customEvent = document.createEventObject();

customEvent.bubbles = true;
customEvent.cancelable = true;
customEvent.view = window;
customEvent.ctrlKey = false;
customEvent.altKey = false;
customEvent.shiftKey = false;
customEvent.metaKey = false;
customEvent.keyCode = keyCode;

target.fireEvent("onkeypress", customEvent);

} else {
document.write("This example is only demonstrating event simulation in firefox and IE.");
}
}


</script>
</head>
<body>
<input id="testinput" type="button" value="kick you"/>
</body>
<script type="text/javascript">



var target =document.getElementById("testinput");
target.onkeypress = function(event){
var event = (event)?event:window.event;
if(event.keyCode == 27){
alert('"ESC" pressed');
}
};
simulateKeyEvent(target,27);
</script>

</html>
msdnlu 2009-10-23
  • 打赏
  • 举报
回复
onkeydown
sundotLei 2009-10-23
  • 打赏
  • 举报
回复
javascript不使用windows组件是无法实现的.使用组件的话,浏览器可能就会发出提示.

所以楼主可以改变下需求,我也不明白楼主为什么要这样做.
浴火_凤凰 2009-10-23
  • 打赏
  • 举报
回复
一直不明白楼主所说的
当你的鼠标经过某个特定的按钮或者区域
按下Esc按键会有什么效果、
王集鹄 2009-10-23
  • 打赏
  • 举报
回复
浏览器出于安全考虑是不会支持的。
itian 2009-10-23
  • 打赏
  • 举报
回复
-----------------------------
一直不明白楼主所说的
当你的鼠标经过某个特定的按钮或者区域
按下Esc按键会有什么效果、

--------------------------------
swandragon 2009-10-22
  • 打赏
  • 举报
回复
ESC 的keyCode = 27
tyroOfJava 2009-10-22
  • 打赏
  • 举报
回复

function escKeyPress(){

var evObj = document.createEvent('KeyboardEvent');
evObj.initKeyEvent("keypress", true, false, null, false, false, false, false, 27, 0);
var booleanR = document.documentElement.dispatchEvent(evObj);
}


请教各位,这个方法在firefox下为什么不能成功模拟按下ESC键,firefox没有报错。
jol_boy 2009-10-22
  • 打赏
  • 举报
回复
js毕竟是客户端的脚本语言~~~哥哥~~如果随便让js乱动键盘的话,你一开页面,我直接给你来个狂按F1帮助页面,循环1000000000000000000次,你机器不死才怪~~~
tyroOfJava 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 beenz 的回复:]
这样,ESC的keycode是27,在IE下
HTML code<script>
window.onload=function(){
document.onkeydown=function(){
alert(event.keyCode)
}
}function escKeyPress(){var wsh=new ActiveXObject("WScript.Shell");
wsh.SendKeys('{ESC 2}');
}</script><inputtype="text"><inputtype="button" value="模拟Esc按下" onclick="escKeyPress()">
[/Quote]

这个在IE下可用,但是还得得到用户的确认才能用,一般可能用户就直接点否认了,不会允许运行这些插件的
BeenZ 2009-10-22
  • 打赏
  • 举报
回复
这样,ESC的keycode是27,在IE下

<script>
window.onload=function(){
document.onkeydown=function(){
alert(event.keyCode)
}
}

function escKeyPress(){
var wsh=new ActiveXObject("WScript.Shell");
wsh.SendKeys('{ESC 2}');
}
</script>

<input type="text" >
<input type="button" value="模拟Esc按下" onclick="escKeyPress()">
tyroOfJava 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 develop_design_level 的回复:]
引用 3 楼 tyroofjava 的回复:
哦 谢谢楼上两位,但是我希望的是能够模拟按下某个按键,也就是说,当鼠标经过一个按钮时,这个按钮会有一个onmouseout的事件,而我希望这个事件能达到按下键盘上的ESC键的效果,也就是说,有一个方法叫做escKeyDown(), 只要调用这个方法,就相当于按下了键盘上的ESC键。

我明白了你的问题,你的意思就是“当你的鼠标经过某个特定的按钮或者区域(比如:div、span)时,就好像是人工的点击了Esc按键。”对么?如果是那个样子,你就在需要实现这样的功能的地方的html的DOM元素上都添加一个onmouseover事件,在这个事件里面写你的代码就OK了。明白否?
[/Quote]

对,没错,问题就在于,我不会写模拟ESC按键按下的代码。
我又google了一下,写了这么个方法,firefox运行没有报错,但是就是没有达到ESC按键按下的效果
escKeyPress()

function escKeyPress(linkId){

var fireOnThis = document.getElementById(linkId);

if (document.createEvent)
{
var evObj = document.createEvent('KeyboardEvent');
evObj.initKeyEvent("keypress", true, false, null, false, false, false, false, 27, 0);
document.documentElement.dispatchEvent(evObj);
}
else if (document.createEventObject)
{
// 这儿对应IE的情况,不会下、写
var evObj = document.createEventObject('KeyboardEvent');
evObj.initKeyEvent("keypress", true, false, null, false, false, false, false, 27, 0);
//fireOnThis.dispatchEvent(evObj);
document.documentElement.dispatchEvent(evObj);
}
}


各位大虾看看,这个方法存在的问题
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tyroofjava 的回复:]
哦 谢谢楼上两位,但是我希望的是能够模拟按下某个按键,也就是说,当鼠标经过一个按钮时,这个按钮会有一个onmouseout的事件,而我希望这个事件能达到按下键盘上的ESC键的效果,也就是说,有一个方法叫做escKeyDown(), 只要调用这个方法,就相当于按下了键盘上的ESC键。
[/Quote]
我明白了你的问题,你的意思就是“当你的鼠标经过某个特定的按钮或者区域(比如:div、span)时,就好像是人工的点击了Esc按键。”对么?如果是那个样子,你就在需要实现这样的功能的地方的html的DOM元素上都添加一个onmouseover事件,在这个事件里面写你的代码就OK了。明白否?
加载更多回复(5)

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部