如何在IE 8-10中使用JavaScript检测“输入点击下一步按钮中的输入键按下”行为

时间:2013-01-21 10:24:32

标签: javascript jquery html internet-explorer

我正在尝试“功能检测”IE的行为,当在输入框中按Enter键时,它旁边有一个按钮元素(当它们不在表单元素中时)。

我说的是IE的行为,因为当输入被聚焦时,按下回车键时没有其他人在下一个按钮上触发点击事件。

相关问题第一个awnser描述了IE的行为如下: IE bug triggers click for 2 buttons?

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

IE中所说的js-fiddle的行为:

  • 打开页面时,输入会获得焦点,然后我们会尝试模拟按下回车键。
  • 模拟的回车键不执行任何操作,因此输入仍保持聚焦和红色。
  • 如果您在输入聚焦时手动按Enter键,该按钮将变为聚焦和绿色。

我目前尝试检测此功能的问题是:

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

与输入聚焦时手动按下回车键实际上并不相同。

如何成功模拟enter键,以便我可以测试此行为? 或者我有其他方法可以测试这种行为吗?

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

3 个答案:

答案 0 :(得分:1)

既不使用jQuery的触发器方法也不使用本机方法,可以按照您希望的方式模拟按键。可以捕获真实的和模拟的按键,但模拟的按键不会触发由真正按键引起的整个事件处理程序链。将此行放在触发器上方可以很容易地证明这一点

$("input").keypress(function(event) { alert(event.which); });

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

使用keypress事件对象也无关紧要。你可以添加一个keyCode,它是IE中真正的按键所具有的,但这不会改变它。似乎什么都不会。不幸的是,我找不到任何解释原因的文档,尽管这个问题已经存在了一段时间

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

所以在浏览器中似乎没有任何办法。你必须从没有这样做。你可以使用像InternetExplorerDriver这样的东西。

我会建议只记录哪些用户代理具有此“功能”,而不是功能检测。由于微软通常会在向后兼容性方面做得很好,因此在未来的版本中,它们不太可能改变输入字段上的enter键的行为。

http://code.google.com/p/selenium/wiki/InternetExplorerDriver

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

使用TextEvent方法,在某些浏览器(例如chrome)中可以将文本(包括换行符号)发送到输入或textarea字段,但这不适用于任何版本的IE到版本10,如此所示小提琴:

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

答案 1 :(得分:1)

似乎无法通过JavaScript测试此行为。 我已经测试了IE 8,9和10,并确认它们都是这样的。

所以现在,我将结合一些想法 Javascript IE detection, why not use simple conditional comments?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

答案 2 :(得分:0)

我没有看到单独使用JavaScript触发错误的可靠方法。您还有其他几个选择:

  1. 在VM中安装IE并使用UI机器人来驱动测试。这需要付出很多努力,但可以可靠地触发错误。

  2. 有些公司提供远程测试;他们使用SSH隧道访问您身边的服务器,并可以针对许多不同版本的IE测试您的网站。这在技术上很容易设置,但由于公司政策,FUD和政治,可能很难获得。谷歌“用许多不同的浏览器测试网站”

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

  4. 只需测试一次,然后依靠惯性(即多年来没有其他人接触过该代码)。