2011-08-19 183 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