js点击按钮执行ctrl p_如何用JavaScript模拟按键或点击?

模拟鼠标单击

我的猜测是网页正在收听mousedown而不是click(这不利于访问,因为当用户使用键盘时,只触发focus和click,而不是mousedown)。所以您应该模拟mousedown、click和mouseup(顺便说一句,它是

what the iPhone, iPod Touch, and iPad do on tap events

).

要模拟鼠标事件,可以将此代码段用于支持

DOM 2 Events

. 为了更简单的模拟,请使用

initMouseEvent

相反。

// DOM 2 Events

var dispatchMouseEvent = function(target, var_args) {

var e = document.createEvent("MouseEvents");

// If you need clientX, clientY, etc., you can call

// initMouseEvent instead of initEvent

e.initEvent.apply(e, Array.prototype.slice.call(arguments, 1));

target.dispatchEvent(e);

};

dispatchMouseEvent(element, 'mouseover', true, true);

dispatchMouseEvent(element, 'mousedown', true, true);

dispatchMouseEvent(element, 'click', true, true);

dispatchMouseEvent(element, 'mouseup', true, true);

当您触发模拟的单击事件时,浏览器实际上会触发默认操作(例如导航到链接的href或提交表单)。

在IE中,等价的片段是这样的(由于我没有IE,所以未经验证)。我不认为你可以给事件处理程序鼠标的位置。

// IE 5.5+

element.fireEvent("onmouseover");

element.fireEvent("onmousedown");

element.fireEvent("onclick"); // or element.click()

element.fireEvent("onmouseup");

模拟按键和按键

您可以模拟keydown和keypress事件,但不幸的是,在Chrome中,它们只触发事件处理程序,不执行任何默认操作。我认为这是因为DOM 3事件工作草案描述了

order of key events

:

keydown(通常有默认操作,如fire click、submit或textInput事件)

按键(如果按键不只是像Shift或Ctrl这样的修改键)

(keydown,keypress)如果用户按住按钮,则repeat=true

按键默认动作!!

弹起

这意味着您必须(在梳理

HTML5

DOM 3 Events

草稿)模拟浏览器在其他情况下所做的大量工作。我讨厌不得不那样做。例如,这大致是如何模拟在输入或文本区域上按一个键。

// DOM 3 Events

var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) {

var e = document.createEvent("KeyboardEvents");

e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1));

target.dispatchEvent(e);

};

var dispatchTextEvent = function(target, initTextEvent_args) {

var e = document.createEvent("TextEvent");

e.initTextEvent.apply(e, Array.prototype.slice.call(arguments, 1));

target.dispatchEvent(e);

};

var dispatchSimpleEvent = function(target, type, canBubble, cancelable) {

var e = document.createEvent("Event");

e.initEvent.apply(e, Array.prototype.slice.call(arguments, 1));

target.dispatchEvent(e);

};

var canceled = !dispatchKeyboardEvent(element,

'keydown', true, true, // type, bubbles, cancelable

null, // window

'h', // key

0, // location: 0=standard, 1=left, 2=right, 3=numpad, 4=mobile, 5=joystick

''); // space-sparated Shift, Control, Alt, etc.

dispatchKeyboardEvent(

element, 'keypress', true, true, null, 'h', 0, '');

if (!canceled) {

if (dispatchTextEvent(element, 'textInput', true, true, null, 'h', 0)) {

element.value += 'h';

dispatchSimpleEvent(element, 'input', false, false);

// not supported in Chrome yet

// if (element.form) element.form.dispatchFormInput();

dispatchSimpleEvent(element, 'change', false, false);

// not supported in Chrome yet

// if (element.form) element.form.dispatchFormChange();

}

}

dispatchKeyboardEvent(

element, 'keyup', true, true, null, 'h', 0, '');

我认为在IE中不可能模拟关键事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值