2011-08-19 184 views
2

我们使用自定义的jquery插件来处理我们的帮助弹出窗口,当用户专注于输入字段。但是我偶然发现了一个奇怪的问题。该插件使用下面的代码来触发帮助弹出:Jquery焦点()与复选框问题

$(this).focus(function(){ 
    // Show popup help panel here 
}); 

然而,如果这个代码应用于输入其中type =“复选框”,显示帮助弹出,但该复选框值很快否定了自己,因此看起来不会从勾号变为未勾号,反之亦然。这发生在IE9和FF6(没有在其他浏览器中尝试过)。我想这非常简单的代码只是为了确保我不会疯了,这个问题仍时有发生:

...在HTML:

<input id="test" type="checkbox" checked="checked" /> 

...在头 - JavaScript的

$('#test').focus(function(){ 
    alert("help!"); 
}); 

显示警报,但复选框值未更改(或已更改,但随后发生改变,因为我认为正在发生)。

任何人都可以对此有所了解。

+0

如果您选中或取消选中方法本身的复选框,这有帮助吗? –

+0

嗨Baszz,感谢您的建设性意见 - 解决方法确实有效,但我不明白为什么会发生这种情况。不管怎么说,还是要谢谢你。 – coalvilledave

回答

3

为什么绑定在'重点'的复选框?

这对我来说没什么意义,因为'焦点'主要是用于文本框或文本区。我会用.click.change代替,我想你会有更好的运气。

对jsfiddle(http://jsfiddle.net/65CRb/1)和绑定focus做了一些测试,甚至在Chrome中甚至都没有工作。我怀疑IE/FF中会出现一些奇怪的事件,而这些事件并没有在你关注时传播到实际控制本身。

+0

我会尝试点击。重点可能有问题与复选框。该事件可能在检查/打勾被呈现之前发生。可能会导致它双击,看起来像是否定自我。 –

+0

@Adam - 这就是我最初想到的,但是有一种情况是用户使用Tab键来改变焦点,在这种情况下,复选框是集中的,但它的值不应该改变。希望这是有道理的。 – coalvilledave

+0

所以...我再问一次,为什么使用焦点?你想采取行动,当他们使用Tab键来突出显示它,但不是当他们点击它时?或者在两者上,但你也想点击工作?复选框上的“焦点”功能根本不是一个好的设计决策。我强烈建议您采取不同的方法处理您认为需要做的事情。就像我之前说过的那样,它在Chrome中完全不受支持,并且可能也是Safari。 –

0

focus不会更改复选框的checked属性。你必须明确改变其选中的属性。像这样的东西。

$('#test').focus(function(){ 
    this.checked = !this.checked; 
}); 
+0

感谢您的回复,我很清楚这一点,但这不是问题所在。问题是,当用户点击复选框时,它会收到焦点并应该切换其值,但后者不会发生。 – coalvilledave

+0

你点击一个复选框焦点事件触发第一次,但到那个时候复选框还没有触发,所以你没有得到切换的值。在焦点事件被触发后,复选框检查/取消选中。 – ShankarSangoli