【问题标题】:javascript enter event doesn't work on googlejavascript输入事件在谷歌上不起作用
【发布时间】:2015-10-09 13:28:54
【问题描述】:

我正在尝试使用 javascript 模拟“输入”按键以实现自动化。

var script = document.createElement('script');
script.src = 'https://code.jquery.com/jquery-1.10.2.min.js';
script.type = 'text/javascript';
document.body.appendChild(script);
var e = jQuery.Event("keypress");
e.which = 13; //choose the one you want
e.keyCode = 13;

这是用于设置按键事件的代码(我也尝试过 keydown 和 keyup)。

搜索 Google 时,这似乎不起作用。如果我输入一些文本并在输入字段$("[name=q]").trigger(e) 上触发事件,则不会发生任何事情。

我正在使用 google 来测试模拟“正确”输入事件。我希望用js来自动化skype web客户端。

有谁知道是否可以使用 javascript 模拟实际的输入按键?我已经看到 Selenide 的 pressEnter() 有效,但它使用 webdriver,所以可能不相关。

我也试过原生js事件触发

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

dispatchKeyboardEvent($("[name=q]"), 'keypress', true, true, null, 'h', 13, '');

旁注我知道可以通过在元素上调用 .submit() 来提交查询,但这不是我想要的。

【问题讨论】:

  • 什么都没发生?我希望错误控制台会抱怨没有定义 jQuery。 (除非在您运行脚本之前已经定义,在这种情况下前四行毫无意义)。
  • 没有错误,它像大多数 jquery 调用一样吐出元素
  • 你选择的元素是否与jquery绑定?
  • @Bobbzorzen 我已经对此进行了研究,但一无所获,唯一能做的就是触发已经绑定的侦听器,但这不会触发真正的 keyevent。
  • @Bobbzorzen 要检索点击侦听器数组,您可以执行 $._data( $("body")[0], "events" )["click"] 。每个监听器对象都有一个handler属性,可以通过aListener.handler.toString()获取函数的字符串表示

标签: javascript jquery events


【解决方案1】:

当您在代码中引用 document 时,代码应该在 dom 准备好时执行。

事件触发代码应该在加载jQuery的时候执行,因此将代码写在script.onload回调中。

here 所述,在将script 元素附加到document.body 之前以及在将src 分配给script 元素之前附加回调。

工作演示jsFiddle

【讨论】:

  • 不确定我是否遗漏了什么,但在加载 jquery 脚本后,我手动完成了事件的调度。我还在 google.com 上测试了您的示例,尽管触发了使用您的代码应用的事件侦听器,但浏览器没有注册 enter 键并执行搜索。
  • 出于安全原因,浏览器不允许元素伪造事件。但是你可以使用sendKeys,它是一个 jQuery 插件来发送事件。
  • 试过了,不行。与原始帖子中描述的默认 keyevent 调度相同。感谢您的提示
【解决方案2】:

如果您的代码一次性设置搜索查询字符串,请监听该字段的 on change 事件并调用该函数。

$("#searchBarId").on("change", function(){
    var e = jQuery.Event("keydown");
    e.which = 13; // # Enter key code value
    $("input").trigger(e)
});

Definitive way to trigger keypress events with jQuery的回答

这能解决您的问题吗?

【讨论】:

  • 很遗憾,没有,正如我的问题中所述,我已经尝试过这种发送事件的方法,但它不起作用。
【解决方案3】:
<select id="ss">
    <option value="1">1</option>
    <option value="2">2</option>
 </select>  

$('#ss').keypress(function(e){
     var p = e.keyCode;
    alert(p);
     if(p==13){
         alert('enter was pressed');
     }
 });

【讨论】:

  • 如前所述,我不是在寻找一种监听事件的方法,而是在寻找一种以逼真的方式模拟事件的方法,例如使用 webdrivers 触发的事件。不过还是谢谢
猜你喜欢
  • 1970-01-01
  • 2019-01-21
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
相关资源
最近更新 更多