首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在IE8-10中使用JavaScript检测“输入单击下一个按钮中的输入键按下”行为

如何在IE8-10中使用JavaScript检测“输入单击下一个按钮中的输入键按下”行为
EN

Stack Overflow用户
提问于 2013-01-21 10:24:32
回答 3查看 2.1K关注 0票数 3

我试图“功能检测”IE的行为,当按下输入框中的enter,输入框旁边有一个按钮元素(当它们不在form元素中时)。

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

第一个awnser描述IE为什么是这样的相关问题:IE bug triggers click for 2 buttons?

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

IE中所述js-小提琴的行为:

  • 打开页面时,输入得到焦点,然后我们尝试模拟按回车键。
  • 模拟的enter键什么也不做,因此输入保持焦点和红色。
  • 如果您手动按回车,而输入是焦点,该按钮将成为焦点和绿色。

我目前试图检测这一特性的问题是:

代码语言:javascript
复制
$("input").trigger(jQuery.Event("keypress", { which: 13 }));

实际上,在输入有焦点时,不需要手动按回车键。

如何成功地模拟enter键,以便能够对此行为进行测试?或者我还有别的方法可以测试这种行为吗?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-22 17:29:17

似乎没有办法通过JavaScript来测试这种行为。我已经测试了IE8,9和10,并证实他们都这样做。

所以现在,我将结合Javascript IE detection, why not use simple conditional comments?http://tanalin.com/en/articles/ie-version-js/的一些想法为IE创建一个测试,只要IE不删除对条件编译注释的支持,IE就能可靠地工作。

代码语言:javascript
复制
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中的浏览器版本,在其他浏览器中为false

票数 1
EN

Stack Overflow用户

发布于 2013-01-21 14:47:21

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

代码语言:javascript
复制
$("input").keypress(function(event) { alert(event.which); });

如您所见,对于模拟按键和真实按键,捕获都很好,而处理这两个按键之间的差别显然仍然存在。

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

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

因此,在浏览器内部似乎没有办法。你必须从没有。你可以用像InternetExplorerDriver这样的东西来做这个。

与其进行特征检测,我建议简单地记录哪些用户代理具有此“功能”。由于微软通常在向后兼容性方面相当困难,因此在未来的版本中,它们不太可能改变输入字段上的回车键的行为。

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

模拟键按下改变输入/textarea字段

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-01-21 13:31:06

我看不出有一种可靠的方法可以单独从JavaScript触发bug。您还有其他几种选择:

  1. 在VM中安装IE并使用UI机器人驱动测试。这需要很大的努力,但会可靠地触发bug。
  2. 有些公司提供远程测试;他们使用SSH隧道访问您端的服务器,并可以使用许多不同版本的IE测试您的站点。这在技术上非常容易设置,但由于公司政策、FUD和政治原因,可能很难实现。Google“用多种浏览器测试网站”
  3. 手动测试一次,当它工作时,编写一个测试用例,它只检查代码是否存在(即当JavaScript文件或页面源不包含某个固定字符串时失败的测试)。职业:很容易设置,Con:很容易打破
  4. 只需测试一次,然后依赖于惯性(也就是说,多年来没有人会接触到该代码)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14436595

复制
相关文章

相似问题

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