首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发enter键按下模拟的默认行为

触发enter键按下模拟的默认行为
EN

Stack Overflow用户
提问于 2016-01-06 12:43:33
回答 1查看 830关注 0票数 2

所以(从“So”开始),我想为qwebirc平台创建一个greasemonkey脚本。我需要根据发生的一些事件自动发送回复。对于那些不知道的人,一旦登录到qwebirc,屏幕底部就会有一个输入文本字段,您可以在其中写入您的回复,然后按enter键将答复发送到服务器。输入字段包含在表单元素中,但表单没有提交按钮。

我可以通过写入输入字段的"value“属性来填充输入字段(没有问题),但我没有找到将答复”提交“到服务器的方法。我试着在容器表单元素上调用.submit()方法,但这只是重新加载页面(所以它要发送到自己--这很有意义,因为表单元素上没有"action“属性)。在我看来,唯一的解释是,一旦enter键在输入字段中按下,就会在qwebirc.js的某个地方调用一个方法。

我找不到负责此操作的代码(虽然我在Chrome中工作过,但我在键盘输入上设置了一个事件侦听器断点,当我按enter键并指向某个函数的开头时,它停止了),因为脚本被缩小了,我无法知道那些"m“、"n”、"p“、"t”等是什么意思。如果我有未压缩版本,我可以扫描它,也许,找到它。我也尝试下载qwebirc项目,但是那里有很多文件,而在服务器上,我试图编写greasemonkey脚本,只有一个脚本。

这里的主要想法是,我认为enter键按下模拟应该触发发送功能--无论是在哪里,无论是哪一个。

为了做到这一点,我在堆栈溢出上发现了一些相同主题的问题--输入按键的模拟。我试过那个密码:

代码语言:javascript
复制
function simulate() {
    var evt = document.createEvent('KeyboardEvent'),
        input = document.querySelector('.keyboard-input');

    evt.initKeyboardEvent(
        'keydown', 
        true, 
        true, 
        window, 
        false, 
        false, 
        false, 
        false, 
        13, 
        0
    );

    input.dispatchEvent(evt);
}

事件是创建的(我可以在FireBug的DOM面板中看到它),但是没有采取任何行动。我的意思是,为什么.dispatchEvent()的行为不像一个真正的enter键按下?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-07 16:39:07

为了回答这个问题,我将假设消息输入伪形式和其他格式一样,即消息可以通过按Enter或单击Send按钮发送。

你试过前者,但没有用。该页面可能正在等待单击“发送”按钮(这可能是由Enter keypress触发的(尽管不是,但我不知道为什么您的事件不工作--我不熟悉事件的复杂性)。相反,那就试试吧。

另外,take note:IE使用的是fireEvent而不是dispatchEvent,所以如果您在IE中,这可能就是问题所在。

若要单击“发送”按钮,请执行以下操作:

代码语言:javascript
复制
var e = document.createEvent("MouseEvents");
e.initEvent("click", true, true);
e.target = "button#send";

if(document.fireEvent) {
    document.fireEvent(e);
}
else {
    document.dispatchEvent(e);
}

将分配给e.target的字符串更改为唯一标识发送按钮的CSS选择器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34633480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档