Tom*_*oss 4 jquery google-chrome ruby-on-rails poltergeist jquery-events
我正在为某些功能编写测试,其中涉及用户按住 Shift 键并单击复选框。我用$('input').trigger($.Event('click', { shiftKey: true }));它来模拟。
但是,当事件侦听器被调用时,event.shiftKey属性总是会被报告为false源自我的合成事件,而真正的点击会产生所需的效果。更令人困惑的是,在非input元素上触发相同的事件似乎工作得很好。例如,请参阅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。它是在 jquery 1.9.0 中添加的
因此,您可以通过向 javascript 添加以下代码来对 jQuery 进行猴子修补:
delete jQuery.event.special.click.trigger
Run Code Online (Sandbox Code Playgroud)
并且复选框单击将按预期工作:http://jsfiddle.net/ofbazqvo/(注意,我e.stopPropogation()也对正文进行了评论),但有一个例外:input.checked值在“onclick”回调中将无效,但稍后会更新为正确的值(令人惊讶的是,这就是为什么这个特殊的复选框处理被添加到 jquery 中)。
或者,您可以通过纯 JavaScript 手动调度事件: http: //jsfiddle.net/6dutftkt/1/。这在 Chrome 中没有任何怪癖。
| 归档时间: |
|
| 查看次数: |
2266 次 |
| 最近记录: |