如何检测“enter”键在输入中按下“next”键;在ie8 -10中使用JavaScript的行为

How to detect "enter-key press in input clicks next button" behavior using JavaScript in IE 8-10

本文关键字:ie8 JavaScript next enter 检测 何检测 输入      更新时间:2023-09-26

我试图"功能检测" IE的行为时,按下输入框,有一个按钮元素旁边(当他们不在表单元素)。

我说的是IE的行为,因为当输入集中时按下enter键时,没有其他人在下一个按钮上触发单击事件。

相关问题,第一个浏览器描述了为什么IE的行为是这样的:IE bug触发点击2个按钮?

JS-Fiddle,我试图通过jQuery模拟按键。Event和.trigger:http://jsfiddle.net/DbVrn/

上述js-fiddle在IE中的行为:

  • 当打开页面时,输入得到焦点,然后我们尝试模拟按下回车键。
  • 模拟的enter键不做任何事情,因此输入保持聚焦和红色。
  • 当输入聚焦时,手动按回车键,按钮将聚焦并变为绿色。

我当前尝试检测此功能时遇到的问题是:

$("input").trigger(jQuery.Event("keypress", { which: 13 }));

实际上与在聚焦输入时手动按enter键的作用不同。

我怎样才能成功地模拟回车键,使我对这个行为的测试成为可能?或者有其他方法可以测试这种行为吗?

编辑:更新标题,更清楚地说明这需要通过javascript进行测试,并且测试需要在IE版本8到10中工作。除非有人能提供一种测试方法,否则我将得出结论,我需要使用用户代理嗅探来查看浏览器是否是IE,并基于此选择代码路径。

无论是使用jQuery的触发器方法还是使用本机方法,都可以按照您想要的方式模拟按键。真实的按键和模拟的按键都可以被捕获,但是模拟的按键不会触发由真实按键引起的整个事件处理程序链。这很容易通过将这一行放在触发器

上面来演示。
$("input").keypress(function(event) { alert(event.which); });

正如您所看到的,对于模拟和真实的按键,捕获工作得很好,而这两种按键的处理之间的差异显然仍然存在。

你如何处理你的按键事件对象也不重要。你可以添加一个keyCode,这是IE中真正的按键,但这不会改变这一点。似乎什么也不会。不幸的是,我找不到任何文档来解释为什么,尽管这个问题已经存在一段时间了

http://forums.asp.net/t/1478871.aspx/1

所以在浏览器内似乎没有办法。你必须从外面做。你可以使用InternetExplorerDriver之类的东西。

比起特征检测,我建议简单地记录哪些用户代理具有此"特征"。由于微软通常很倾向于向后兼容,所以他们不太可能在未来的版本中改变输入字段上的enter键的行为。 http://code.google.com/p/selenium/wiki/InternetExplorerDriver

模拟按键改变输入/文本区字段

使用TextEvent方法可以在某些浏览器(例如chrome)中发送文本,包括新行,到输入或文本区域字段,但这将无法在任何版本的IE 10中工作,如下所示:

http://jsfiddle.net/qz7kV/1/

似乎没有办法通过JavaScript测试这种行为。我已经测试了ie8、ie9和ie10,并确认它们都是这样运行的。

那么现在,我将结合一些想法从Javascript IE检测,为什么不用简单的条件注释?和http://tanalin.com/en/articles/ie-version-js/为IE创建一个测试,只要IE不删除对条件编译注释的支持,该测试就可以可靠地工作。

var ie = (/*@cc_on!@*/false && (function(){
    var div = document.createElement("div"),
        list = div.getElementsByTagName("br"),
        version = 3;
    do {
        div.innerHTML = "<!--[if gt IE " + (++version) + "]><br><![endif]-->";
    } while(list[0]);
    return (version > 4 ? version : 10);
}()));

ie变量在Internet Explorer中将是浏览器版本,在其他浏览器中将是false

我没有看到一个可靠的方法来触发从JavaScript单独的错误。您还有其他几个选项:

  1. 在VM中安装IE,并使用UI机器人驱动测试。

  2. 有提供远程检测的公司;他们使用SSH隧道访问您的服务器,并可以针对许多不同版本的IE测试您的站点。这在技术上很容易设置,但由于公司政策、FUD和政治,可能很难实现。Google搜索"使用多种浏览器测试网站"

  3. 手动测试它一次,当它工作时,写一个测试用例,只是检查代码是否存在(即当JavaScript文件或页面源不包含某个固定字符串时测试失败)。优点:非常容易设置,缺点:容易损坏

  4. 只需测试一次,然后依赖惯性(即多年来没有人会碰那个代码)。