2011-08-12 14 views
22

私は非常に独特の何かに気がついたときに、このother questionのために再検査してきました。 FF4/5は、focus jQueryイベントを起動できません。 The other questionは、複製とみなされていた可能性がありますが、実際の回答なしで閉じられ、受け入れられました。質問自体についてはjQueryのフォーカスがファイアウォールで失敗する

、私は次のコードの単純なビット試してみました:これは、ChromeでとIEでうまく動作しますが、それはFFに失敗し

$('#target').focusout(function() { 
    $(this).focus(); 
}); 

を。ここには私たちの間の怠惰なもののためのjsFiddleがあります。

誰でもこの動作を説明できますか?それとも既知のバグですか?

+1

私は非常にこの上に光を発することに興味があります。郵便のための乾杯。 – Somk

答えて

46

私はこの前に遭遇したと思います。私が正しく思い出すと、何らかのリエントラント問題であるようです。私の印象は、FFはすでにフォーカスを移行中であるため、別のフォーカスの移行を開始できないということでした。私は私の回避策は

$('#target').focusout(function() { 
    setTimeout(function() { 
     $(this).focus(); 
    }, 0); 
}); 
+0

これは私が提供した回避策であり、完全に機能しました。 – Somk

+4

これは 'focus()'がFirefoxで動作するためです。問題を引き起こしているように見えるのは、この 'focusout()'の中に含まれているときだけです。 – tw16

+0

実際には、関数が実行中のスレッドのコンテキストから取り出され、その直後に実行されるため、setTimeout(func、0)は十分でなければなりません。 100msでちらつきが発生する可能性があります:) –

3

のようなものがmanual.focus()コール

aboultこの方法は.trigger( 'フォーカス')

.trigger()トピックからのショートカットがあると言うだったと思います

.trigger()simul合成されたイベントオブジェクトで完了したイベントアクティブ化を開始したとき、それは自然に発生するイベントを完全に複製しません。

私はそれを理解するように、コール$(this).focus();は、(オブジェクトに取り付けられた1つがある場合)ONFOCUSイベントをトリガすることになっているが、実際にフォーカスがあるオブジェクトを設定/変更するquaranteedされていません。

+1

しかし、ファイヤーフォックスでしか失敗しません。 –

+1

ええ、それは文書化された制限のようなものではありません(非常にはっきりと綴られていません)。 – ain

0

これはFirefox 38で私にとってはうまくいきました。別の遅延msをテストする必要がありました。 @camaleoコメントありがとうございます。

0

最新のFirefoxでは、setTimeout機能を必要とせずにフォーカスが動作しているようです。

また、入力フィールドを選択する場合は、.select()関数をdocument.execCommand( 'SelectAll')として使用する必要があります。 Firefoxでも動作していないようです。

入力フィールドを最初にフォーカスして選択した後、それをコピーしたり、必要に応じて何でもできます。私はこれが、この問題を探しています誰を助けることを願っ

$(".copyURL").click(function(){ 
    $(this).prev().focus().select(); 
    document.execCommand("Copy",false,null); 
}); 

:私は誰かがコピーボタンを押した場合は、入力フィールドからURLをコピーするために必要な私の使用例では

+0

最新のfirefox(v50.1)をダウンロードしたところ、問題が解決しなかったことがわかりました。おそらくLinux版ではバグは修正されていないでしょうか?その一方で、focusoutのための@chaosと(0msを使用する)setTimeoutトリックに感謝します。それは問題を解決しました。 – tgoneil

関連する問題