问题在于运行时在全局上下文中缓存 jQuery 对象。这是您的代码中的两个片段(来自您问题中的链接:http: //jsfiddle.net/adardesign/aZRK7/12/):
HTML:
<div id="qunit-fixture">
<span id="ele1" class="action" data-action="action1"></span>
<span id="ele2" class="action" data-action="action2" ></span>
</div>
JS:
// caching elements
var $ele1 = $('#ele1'),
$ele2 = $('#ele2');
test('action1', function() {
ok($ele2.trigger('click') ....
test('action2', function () {
ok($ele1.trigger('click') ....
实际元素在内部#qunit-fixture
,每个测试都会重置和重新解析,因此您从测试内部触发的点击事件是在现在不再在document
. 相反,这些元素已被分离并#qunit-fixture
从原始 html 文本中重新解析,从而创建新的 DOM 元素。
我已经分叉了你的 jsFiddle 并相应地对其进行了修改:http: //jsfiddle.net/aZRK7/15/
尽管我在注意到之前清理了各个部分,但基本的变化是将元素的查询移动到测试内部:
test('foo', function() {
var $foo = $('#ele1');
ok($foo.trigger('click') ....
test('bar', function () {
var $bar = $('#bar');
ok($bar.trigger('click') ....