4

私は次のことを達成しようとしています。リンクをクリックすると、メニューが表示されます。そのメニューがフォーカスを失うとすぐに、メニューをクリアします (メニュー項目がクリックされたときも、メニューを削除します)。

これが私の愚かなコードです:

    <a id="owner" href="javascript: doThis();" onblur="remove();">ClickOnMe</a>

    function doThis() { console.log('clickedOnItem'); }

    function remove() { console.log('removed'); }

私はこれを機能させることができないようです。IE10 では正常に動作しますが、Chrome では動作しません。

これをいじってください:http://jsfiddle.net/5t6wr/5/

4

1 に答える 1

1

何らかの理由で、Chrome がリンクをフォーカスされたアイテムとして登録していません。私たちがしなければならないことは、リンクを強制的にフォーカスして、クロムがそれを認識できるようにすることです.

リンクを次のように変更します。

<a id="owner" href="javascript: document.getElementById('owner').focus(); doThis();" >ClickOnMe</a>

所有者にフォーカスを追加し、関数を続行してメニューを表示しました。

doThis 関数内に以下を追加します。

document.activeElement.onblur = function() { remove(); };

これは現在のアクティブな要素を取得します。フォーカスが失われた場合は、スクリプトを実行してウィンドウを閉じます。

注: メニューから何かをロードするため、削除機能をタイムアウトにする必要があります。両方を同時にトリガーしたくない場合は、競合が発生します。

最終バージョンを確認するためのフィドルは次のとおりです: http://jsfiddle.net/5t6wr/4/

于 2013-05-13T19:37:03.230 に答える