使用jQuery,如何在单击链接时模拟(触发?)KeyPress?例如,当用户单击以下链接时:
<a id="clickforspace" href="#">Click Here</a>
Run Code Online (Sandbox Code Playgroud)
然后,通过单击链接,就好像他们按下键盘上的"空格键"一样.
这样的事情,我假设:
$("#clickforspace").click(function(e) {
e.preventDefault();
//... Some type of code here to initiate "spacebar" //
});
Run Code Online (Sandbox Code Playgroud)
关于如何实现这一点的任何想法?
我正在尝试使用JavaScript在Safari中模拟键盘事件.
我试过这个:
var event = document.createEvent("KeyboardEvent");
event.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 115, 0);
Run Code Online (Sandbox Code Playgroud)
......还有这个:
var event = document.createEvent("UIEvents");
event.initUIEvent("keypress", true, true, window, 1);
event.keyCode = 115;
Run Code Online (Sandbox Code Playgroud)
但是,在尝试这两种方法之后,我遇到了同样的问题:在执行代码之后,事件对象的keyCode/ whichproperties设置为0,而不是115.
有谁知道如何在Safari中可靠地创建和发送键盘事件?(如果可能的话,我宁愿用纯JavaScript实现它.)
我想在html页面中模拟给定textarea元素上的keydown事件.因为我正在使用chrome,所以我调用initKeyboardEvent了我的变量,并将我想要输入的keyCode传递给了textarea.这是我尝试过的:
var keyEvent = document.createEvent('KeyboardEvent');
keyEvent.initKeyboardEvent('keydown', true, false, null, 0, false, 0, false, 77, 0);
inputNode.dispatchEvent(keyEvent);
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我正在键入字母,m但textarea只获取keyCode 13,这是Enter键.所以,我尝试了一个我在网上看到的覆盖代码,它将值设置为keyCodeVal,但没有成功
var keyEvent = document.createEvent('KeyboardEvent');
Object.defineProperty(keyEvent, 'keyCode', {
get : function() {
return this.keyCodeVal;
}
});
keyEvent.initKeyboardEvent('keydown', true, false, null, 0, false, 0, false, 77, 0);
keyEvent.keyCodeVal = 77;
inputNode.dispatchEvent(keyEvent);
Run Code Online (Sandbox Code Playgroud)
有谁知道如何设置keyCode值?
我正在尝试使用Chrome上的javascript将键盘事件发送到页面.我有一个曾经在Firefox上工作的方法:
pressKey = function(key, shift) {
var evt = document.createEvent('KeyboardEvent');
evt.initKeyEvent("keypress", false, true, null, false, false,
shift, false, keyCode(key), key.charCodeAt(0));
document.dispatchEvent(evt);
}
Run Code Online (Sandbox Code Playgroud)
其中key是所需的键,keyCode将小写字母更改为高位字母,并调用charCodeAt().
我的问题是Safari/Chrome上的事件没有initKeyEvent,而是initKeyboardEvent.我可以注意到的主要区别是你必须将密钥作为keyIdentifier(看起来像一个unicode字符)传递,而不是传递keycode和keychar.尽管如此,我仍然无法使其成功.
我也尝试过这里描述的JQuery方法但没有成功.
编辑: 我进一步调试了这一点似乎Chrome上的事件确实触发了侦听器,但keyCode/charCode始终为0.我试图设置evt.keyCode或evt.charCode也没有成功.
我希望浏览器的行为就像用户点击某些内容时按Tab键一样.在点击处理程序中,我尝试了以下方法:
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 0);
this.input.focus()[0].dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)
和jQuery:
this.input.focus().trigger({ type : 'keypress', which : 9 });
Run Code Online (Sandbox Code Playgroud)
第一种方法似乎是最好的选择,但并不是很有效.如果我将最后两个参数更改为98,98,确实在输入框中输入了'b'.但是,9,0和9,9(前者我从MDC网站上取得的)都在FF3下的firebug中给我这些错误:
Permission denied to get property XULElement.popupOpen
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.overrideValue
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to set property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)
我听说过(没有明确定义'此类')事件是"不可信的",这可能解释了这些错误.
第二种方法导致我作为event.which传递的任何值作为event.which,但没有效果(即使我使用98而不是9,在框中没有输入'b'.)如果我尝试设置事件在我传递的对象中的.data,当事件被触发时它最终未定义.以下是我用来查看的代码:
$('#hi').keypress(function(e) {
console.log(e); …Run Code Online (Sandbox Code Playgroud) 我正试图找到一种模拟按键的方法.
例如,当启动功能时,应按下"向下箭头"键,因此网页应略微滚动.
我只对Chrome感兴趣,jQuery或普通JS都适合.(普通的JS会更优选).
这是我尝试过的代码示例之一:
var e = $.Event("keydown", { keyCode: 40}); // 40 = down arrow
$("body").trigger(e);
// When I launch it the console, nothing happens. The page is not scrolled.
// May be I missed some obvious?
Run Code Online (Sandbox Code Playgroud)
我搜索并发现了以下相关问题,但解决方案对我不起作用:
换一种说法
使用AutoHotkey,您可以轻松地制作以下内容:
Down::
Send, {Up}
Run Code Online (Sandbox Code Playgroud)
然后,如果按Down箭头键,它将被触发Up.我只想用JS实现它.
SendKeys是将键击发送到应用程序的方法.
我可以在Javascript中执行此操作,在浏览器中发送按键吗?
参考:http :
//msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
我的任务是抓取使用React构建的网站.我正在尝试填写输入字段并使用javascript注入页面提交表单(在移动设备中使用selenium或webview).这就像每个其他网站+技术的魅力,但React似乎是一个真正的痛苦.
所以这是一个示例代码
var email = document.getElementById( 'email' );
email.value = 'example@mail.com';
Run Code Online (Sandbox Code Playgroud)
我在DOM输入元素上更改了值,但React不会触发change事件.
我一直在尝试各种不同的方法来让React更新状态.
var event = new Event('change', { bubbles: true });
email.dispatchEvent( event );
Run Code Online (Sandbox Code Playgroud)
徒劳无功
var event = new Event('input', { bubbles: true });
email.dispatchEvent( event );
Run Code Online (Sandbox Code Playgroud)
不工作
email.onChange( event );
Run Code Online (Sandbox Code Playgroud)
不工作
我无法相信与React的互动变得如此困难.我非常感谢任何帮助.
谢谢
我有一个巨大的输入表单和字段供用户输入.
在用户使用tab键移动到下一个feild的表单中,有一些隐藏字段和只读文本框,其中使用javascript禁用了tab键.
现在用户发现难以使用Tab键并且想要在键盘的向下箭头键上使用相同的功能.
我使用下面的代码来调用js上的tab键代码但是没有工作,请一些正文帮助我.
function handleKeyDownEvent(eventRef)
{
var charCode = (window.event) ? eventRef.keyCode : eventRef.which;
//alert(charCode);
// Arrow keys (37:left, 38:up, 39:right, 40:down)...
if ( (charCode == 40) )
{
if ( window.event )
window.event.keyCode = 9;
else
event.which = 9;
return false;
}
return true;
}
<input type="text" onkeydown=" return handleKeyDownEvent(event);" >
Run Code Online (Sandbox Code Playgroud) var el = document.getElementById('action');
el.addEventListener('click', function()
{
var t = document.getElementById('text');
t.value = 'A should be typed later';
t.focus();
t.setSelectionRange(0, 0);
setTimeout(function()
{
t.dispatchEvent(new Event('keypress', {keyCode: 65}))
}, 800);
}, false);Run Code Online (Sandbox Code Playgroud)
<textarea id="text"></textarea>
<button id="action">
Do It
</button>Run Code Online (Sandbox Code Playgroud)
我想念的a是什么,没有添加到开头textarea?
目的是真正模拟键盘上按键的实际按键,而不是(重新)设置文本区域value.
更新:这不是这个问题的重复.
(i)大部分答案都有用jQuery.
(ii)我无法从上述案例的答案中找到一个有效的例子.
(iii)实际上,上述代码来自该页面.
无论如何,这是否重复.您可以将问题读作:为什么以上简单的代码不起作用?
javascript ×10
jquery ×3
events ×2
keyboard ×2
webkit ×2
automation ×1
dom-events ×1
html ×1
reactjs ×1
safari ×1
sendkeys ×1
web-crawler ×1