我试图“功能检测”IE的行为,当按下输入框中的enter,输入框旁边有一个按钮元素(当它们不在form元素中时)。
我是说IE的行为,因为在输入集中时,没有其他人在按enter键时在next按钮上触发单击事件。
第一个awnser描述IE为什么是这样的相关问题:IE bug triggers click for 2 buttons?
我尝试通过jQuery.Event和.trigger:http://jsfiddle.net/DbVrn/来模拟按键
IE中所述js-小提琴的行为:
我目前试图检测这一特性的问题是:
$("input").trigger(jQuery.Event("keypress", { which: 13 }));实际上,在输入有焦点时,不需要手动按回车键。
如何成功地模拟enter键,以便能够对此行为进行测试?或者我还有别的方法可以测试这种行为吗?
编辑:更新标题,以更清楚地说明这需要通过javascript进行测试,并且测试需要在IE中运行,从版本8到10。除非其他人能够提供一种测试方法,否则我将得出结论,我需要使用用户代理嗅探来查看浏览器是否是IE,并选择基于此的代码路径。
发布于 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就能可靠地工作。
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。
发布于 2013-01-21 14:47:21
无论是使用jQuery的触发器方法还是使用本机方法,都可以以您想要的方式模拟按键。真实按键和模拟按键都可以被捕获,但是模拟按键不会触发由真实按键引起的整个事件处理程序链。这很容易通过将这条线置于触发器之上来演示。
$("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/
发布于 2013-01-21 13:31:06
我看不出有一种可靠的方法可以单独从JavaScript触发bug。您还有其他几种选择:
https://stackoverflow.com/questions/14436595
复制相似问题