我正在为某些功能编写测试,其中涉及用户按住 Shift 键并单击复选框。我在用着$('input').trigger($.Event('click', { shiftKey: true }));
来模拟那个。
但是当事件监听器被调用时,event.shiftKey
财产总是被报告为false
当源自我的合成事件时,而真实的点击会产生所需的效果。更令人困惑的是,在非input
元素似乎工作得很好。看http://jsfiddle.net/huskssk1/ http://jsfiddle.net/huskssk1/例如。
我在浏览器(Chrome 39、OS X)和测试堆栈(Poltergeist 1.5.1 + PhantomJS 1.9.8)中观察到这种行为。
这是什么原因造成的?有什么办法解决吗?
PS我的完整测试堆栈是Ruby on Rails + RSpec + Capybara + Poltergeist + PhantomJS,如果您知道触发shift-click的更好方法,请告诉我!
@Vijay 是正确的,这是 jQuery 问题。问题出在这一行:https://github.com/jquery/jquery/blob/master/src/event.js#L577 https://github.com/jquery/jquery/blob/master/src/event.js#L577。
它是在 jquery 1.9.0 中添加的
因此,您可以通过向 javascript 添加以下代码来对 jQuery 进行猴子修补:
delete jQuery.event.special.click.trigger
单击复选框将按预期工作:http://jsfiddle.net/ofbazqvo/ http://jsfiddle.net/ofbazqvo/(注意,我评论了e.stopPropogation()
身体上也有),但有一个例外:input.checked
value 在你的“onclick”回调中将是无效的,但稍后会更新为正确的值(令人惊讶的是,这就是为什么这个特殊的复选框处理被添加到 jquery 中的原因)。
或者,您可以通过纯 JavaScript 手动调度事件:http://jsfiddle.net/6dutftkt/1/ http://jsfiddle.net/6dutftkt/1/。这在 Chrome 中没有任何怪癖。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)