【问题标题】:How to simulate typing in input field using jQuery?如何使用 jQuery 在输入字段中模拟输入?
【发布时间】:2012-12-06 08:37:46
【问题描述】:

我想要的是使用javascript模拟在<input>字段中输入。

我有以下代码:

var press = jQuery.Event("keydown");
press.ctrlKey = false;
press.which = 65;
$("#test").trigger(press);

但是当我加载页面时,#test 输入字段没有输入字符,'65' 的键码代表'A',但是没有'A'输入。

基本上我想要的是使用 Greasemonkey 自动输入网站。

请给我一些想法或一些库,我可以用它来做到这一点。
非常感谢!

【问题讨论】:

    标签: javascript jquery greasemonkey keyboard-events textinput


    【解决方案1】:

    你可以发送关键事件,任何监听它们的东西都会得到它们,但它们不会改变输入,所以你不会看到字母A出现,例如。这主要是安全问题;请参阅 "Manually firing events" 以了解有关该问题的讨论。

    因此,如果您希望字母出现,您必须在发送按键事件时更改输入的值。有一个 jQuery 插件,请参阅 "The $.fn.sendkeys Plugin"

    您可以在this jsFiddle 看到<input> 如何对用户应用的键、键事件和该插件做出反应。

    作为参考,这是来自 jsFiddle 的关键代码:

    $("button").click ( function (zEvent) {
        if (zEvent.target.id == "simA_plain") {
            console.log ("Send Plain key event");
            var keyVal = 65;
            $("#eventTarg").trigger ( {
                type: 'keypress', keyCode: keyVal, which: keyVal, charCode: keyVal
            } );
        }
        else {
            console.log ("Use the Plugin to simulate a keystroke");
            $("#eventTarg").sendkeys ("B") ;
        }
    } );
    


    如果您只是想“模拟在<input> 上打字”,该插件应该就足够了。但是,根据您真正想要做什么,您可能需要执行以下一项或多项操作:

    1. 只需将文本设置为您想要的。
    2. 发送keydown 事件,如果页面的 javascript 触发了该事件。
    3. 同样,发送change 事件等,如果页面的 javascript 触发了该事件。
    4. 直接找到并调用页面的javascript即可。使用脚本注入location hackunsafeWindow 和/或@grant none 模式来做到这一点。
    5. 还有别的吗?说明您的真实目标并链接到目标页面。

    【讨论】:

    • 真的很有帮助:)
    • @isa,我刚刚检查了链接和小提琴。两者似乎仍然有效。为什么/如何确切地它“不起作用”?
    • 哦,我想这可能是我的问题,但我不知道为什么。它把我带到了小提琴页面,云图标一直在不停地跳跃,内容似乎没有加载。
    • @isa,这是另一个网站的问题。但它可能是你的浏览器,或者它的配置,或者它的扩展。或者,可能是您所在的网络。
    • 请问什么是 Javascript 唯一的等价物?我正在尝试在 Chrome 扩展程序中手动模拟第三方网站上的键入搜索,但无法弄清楚如何触发他们的搜索代码,因为手动类型和搜索的行为与编程类型不同....
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2016-03-25
    • 2012-03-03
    • 1970-01-01
    • 2011-01-25
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多