相关疑难解决方法(0)

是否可以通过编程方式模拟按键事件?

是否可以在JavaScript中以编程方式模拟按键事件?

javascript dom-events

342
推荐指数
16
解决办法
42万
查看次数

如何使用JavaScript模拟按键或单击?

我写了一个谷歌浏览器扩展程序,我想要使用我的扩展程序的网站要求我点击或标签到文本框(因为我认为它只运行javaScript验证"onClick").我可以使用我的扩展程序在框中获取文本:

document.getElementById("input1").value = 'test';
Run Code Online (Sandbox Code Playgroud)

但是当我点击提交时,它认为我没有在"input1"文本框中输入任何内容,因为我从未点击过它或在其上打勾.

有人可以帮我解决这个问题吗?

javascript google-chrome google-chrome-extension

40
推荐指数
4
解决办法
11万
查看次数

Chrome中的KeyboardEvent,keyCode为0

我试图在调度的事件对象上设置keyCode.

单击按钮时,会在文本框控件上引发事件以模拟keydown事件.事件成功引发,但keyCode为0.我需要将具有正确keyCode的事件对象发送到文本框.我一直在使用这里的代码.

如何在调度事件中设置keyCode值?

<html>
    <head>      
    </head>
    <body>
        <input type="button" id="btn" value="Click"></input>
        <input type="text" id="txt"></input>
        <script>
            document.getElementById('btn').addEventListener("click", btnClick);
            document.getElementById('txt').addEventListener("keydown", txtKeydown);         

            function btnClick(e) {
                var txt = document.getElementById('txt');               

                var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) {
                    var e = document.createEvent("KeyboardEvents");
                    e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1));
                    e.keyCode = 83;
                    e.charCode = 0;
                    target.dispatchEvent(e);
                };

                var canceled = !dispatchKeyboardEvent(txt,
                'keydown', true, true,  // type, bubbles, cancelable
                window,  // window
                's',  // key
                0, // location: 0=standard, 1=left, 2=right, 3=numpad, 4=mobile, 5=joystick
                false, false, false);  // Ctr, …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome keydown keyboard-events

27
推荐指数
2
解决办法
3万
查看次数

在Chrome上触发键盘事件

我正在尝试使用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也没有成功.

javascript webkit google-chrome

26
推荐指数
3
解决办法
4万
查看次数

我可以有条件地更改在按键上输入的输入字符吗?

是否可以更改已在按键上输入的字符,而无需手动操作?

例如,如果我想根据某些条件强制使用大写字母,那么执行以下操作会很好:

function onKeypressHandler(e)
{
    if ( condition )
    {
        e.which -= 32;
    }
}
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用.

注意:不是一个全面的大写字母,而只是特定的字符.

也许我想说if ( e.which >= 97 && e.which <= 102 )或者if ( Wind.Direction == 'South' )其他什么 - 条件本身并不重要,但是大写只能应用于当前字符而不是整个输入.


我可以通过手动附加更改后的角色来实现,但这是一种丑陋而混乱的方式,并且可能比它更慢.

function onKeypressHandler(e)
{
    if ( condition )
    {
        $j(this).val( $j(this).val() + String.fromCharCode( e.which - 32 ) );
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此方法的一个特定缺陷 - 如果选择所有输入文本并输入密钥,如果它落入此中,则它不会删除现有内容,而只是附加到用户想要删除的内容.(需要调查检测任何选定的文本来解决这个问题,这使得这个问题变得更加丑陋.)

谁能提供更好的解决方案?

javascript jquery keypress

18
推荐指数
1
解决办法
1万
查看次数

使用特定的keyCode测试Jasmine中的keydown事件

我正在为AngularJS指令编写测试,该指令<textarea>在按下某些键时触发事件.根据我的手动测试,一切正常.我想要做得很好,也有一个完整的单元测试套件,但是我遇到了一个我自己无法解决的问题:

我想在我的测试中发送一个特定keyCodetriggerHandler()调用,但我找不到一种方法来指定实际工作的密钥.我知道有关构建和发送具有特定数据的事件的主题的许多问题和答案,但它们都不适用于我的设置:

我的设置

  • Karma试验跑步者
  • PhantomJS浏览器运行测试(但也试过Firefox和Chrome没有成功)
  • 我没有使用jQuery,我希望有一个常规的JS解决方案.必须有!

测试代码

var event = document.createEvent("Events");
event.initEvent("keydown", true, true);
event.keyCode = 40; // in debugging the test in Firefox, the event object can be seen to have no "keyCode" property even after this step
textarea.triggerHandler(event); // my keydown handler does not fire
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我可以在Chrome中键入控制台中的前3行,并看到正在创建事件keyCode属性设置为40.所以看起来应该可以正常工作.

此外,当我像这样调用最后一行时,textarea.triggerHandler("keydown");它工作,并触发事件处理程序.然而,没有keyCode合作,所以这是毫无意义的.

我怀疑它可能与针对DOM运行的测试的性质有关,该DOM与浏览器中运行的常规页面不同.但我无法弄清楚!

javascript unit-testing jasmine angularjs karma-runner

10
推荐指数
1
解决办法
1万
查看次数

JavaScript:将关键事件模拟​​到文本框/输入中

尽管有很多关于如何在JS中模拟按键(keydown/keypress)的文章,但没有一个解决方案似乎与我正在使用的浏览器一起使用(Firefox ESR 17.0.7,Chrome 28.0.1500.72,IE 10).我测试的解决方案来自这里,这里这里.

我要做的是模拟textarea/input中的任何键击.虽然我可以追加/删除直接更改"值"的字符,但我看不到选项,只能输入"Up","Down","Home"等键的模拟.

根据文档,它应该很简单.例如:

var e = document.createEvent("KeyboardEvent");
if (e.initKeyboardEvent) {  // Chrome, IE
    e.initKeyboardEvent("keydown", true, true, document.defaultView, "Enter", 0, "", false, "");
} else { // FF
    e.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, 13, 0);
}
document.getElementById("text").dispatchEvent(e);
Run Code Online (Sandbox Code Playgroud)

确实触发了"Enter"keydown事件,我的处理程序可以捕获它.但是,它不会以任何方式影响textarea - 不会出现新行.其他键码相同:不显示字符,箭头不改变插入符号的位置等.

我已经通过Orwellophile扩展了代码并将其发布到http://jsfiddle.net/npF3d/4/,所以任何人都可以使用代码.在我的浏览器中,在任何情况下都没有按钮对textarea产生任何影响.

我将不胜感激这个问题的任何帮助.

javascript input keydown simulate

9
推荐指数
1
解决办法
1万
查看次数

强制React通过注入JavaScript来触发事件

我想做什么

我目前正在为Web-Whatsapp写一个小聊天机器人.由于简单的js注射,我决定使用镀铬扩展.有一个语音留言按钮,可以在您开始输入内容时切换到发送文本的按钮.React删除语音邮件元素并呈现发送按钮.

问题

整个过程是事件驱动的.我正在通过DOM设置Text,它不会触发react事件.我试图模拟一个按键,但似乎chrome的v8禁用了出于安全原因模拟按键的所有方法.我也试图稍微操纵HTML,但在我对Elements进行更改后反应停止了.我也尝试了jQuery函数,但这也不起作用.

引用没有帮助的事情:

Chrome中的Keydown Simulation通常会触发,但不会触发正确的键

https://api.jquery.com/keypress/

问题

有没有办法强制React解雇这个事件?或者任何类型的解决方法?

javascript jquery reactjs

9
推荐指数
1
解决办法
1425
查看次数

模拟在JavaScript中输入

我尝试在特定的模拟Enter中.这是我的代码:JavaScriptTextArea

 function enter1() {
       var keyboardEvent = document.createEvent('KeyboardEvent'); 
       var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? 'initKeyboardEvent' : 'initKeyEvent'; 
       keyboardEvent[initMethod]('keydown', // event type : keydown, keyup, keypress
            true, // bubbles
            true, // cancelable
            window, // viewArg: should be window
            false, // ctrlKeyArg
            false, // altKeyArg
            false, // shiftKeyArg
            false, // metaKeyArg
            13, // keyCodeArg : unsigned long the virtual key code, else 0
            13 // charCodeArgs : unsigned long the Unicode character associated with the depressed …
Run Code Online (Sandbox Code Playgroud)

html javascript enter keyboard-events dom-events

6
推荐指数
2
解决办法
1万
查看次数

initKeyEvent按键仅适用于FireFox.需要跨浏览器解决方案!

这是我的代码:

<script>
function f(){
var i=document.getElementById("i");
i.focus();
 var evt = document.createEvent("KeyboardEvent");
    evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 

0, 32);
    i.dispatchEvent(evt);
}
</script>
<body onload="f();">
<input id="i"/>
</body>
Run Code Online (Sandbox Code Playgroud)

在Firefox中打开脚本,它正在运行.输入框中的空白区域显示代码已生效.

但是上面的代码在Chrome,Safari,Opera等中不起作用.

我们如何修改上面的代码以使其在这些浏览器中工作?

html javascript web

5
推荐指数
1
解决办法
6885
查看次数

JavaScript触发InputEvent.isTrusted = true

我正在尝试自动执行JavaScript中的某些任务,并且需要使用InputEvent,但是当我使用常规事件时,我得到的是event.isTrusted = false,并且我的事件没有执行任何操作。这是我的活动代码:

var event = new InputEvent('input', {
    bubbles: true,
    cancelable: false,
    data: "a"
}); 

document.getElementById('email').dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

该代码应将“ a”放入ID为“ email”的textField中,但是当event.isTrusted = false时,此代码将不执行任何操作。我正在使用事件监听器断点在“源代码”选项卡中的Chrome开发人员工具中对其进行测试(我仅检查了键盘>输入断点,并向我显示了所用事件的所有属性)。我检查了真正的键盘单击的所有属性,唯一不同的是event.isTrusted。

我可以更改什么或如何获取event.isTrusted = true

html javascript javascript-events

5
推荐指数
2
解决办法
2386
查看次数

HTML5 数据列表 - 以编程方式显示选项列表

我是 HTML5 数据列表的新手。我已经设置了<input type="text">与以下内容相关的内容<datalist>

例如:

<input list="browsers" name="browser">
<datalist id="browsers">
    <option value="Internet Explorer">
    <option value="Firefox">
    <option value="Chrome">
    <option value="Opera">
    <option value="Safari">
</datalist>
Run Code Online (Sandbox Code Playgroud)

Chrome / Chromium 将输入显示为组合框,允许列出所有可能的值:

Chrome / Chromium 上的数据列表

Firefox 将输入显示为任何其他文本字段,但我意识到可以双击该字段或单击该字段并按向下箭头键来显示所有选项:

Firefox 上的数据列表

我需要实现一个与浏览器无关的按钮,在单击该按钮时显示该选项列表。喜欢:

<input list="browsers" name="browser">
<datalist id="browsers">
    <option value="Internet Explorer">
    <option value="Firefox">
    <option value="Chrome">
    <option value="Opera">
    <option value="Safari">
</datalist>
<button type="button">Show options</button>
Run Code Online (Sandbox Code Playgroud)

显示选项按钮

我怎样才能实现这样的按钮?

html javascript datalist html-datalist

5
推荐指数
0
解决办法
648
查看次数

有没有办法模拟用鼠标点击鼠标按下多个键?

我正在研究chrome扩展,以使Netflix视频播放器打开隐藏的不断变化的质量面板.

Netflix根据Internet的速度自动更改视频质量.

但是有一种已知的方法可以打开隐藏面板并手动更改质量.

这是在HTML5播放器中仅打开隐藏面板的方法CTRL + SHIFT + ALT + S.

有没有办法当用户点击标题时,
它模拟键盘键CTRL + SHIFT + ALT + S

$('body').on('click', 'div.player-status .player-status-main-title', function () {
    alert('Clicked!');
    //Simulate?
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery html5 google-chrome google-chrome-extension

4
推荐指数
1
解决办法
3038
查看次数