explicitOriginalTarget
うーん... Firefoxでは、クリックされた要素をプルするために使用できます。IE でも同じことを期待toElement
していましたが、うまくいかないようです...ただし、新しくフォーカスされた要素をドキュメントから取得できます。
function showBlur(ev)
{
var target = ev.explicitOriginalTarget||document.activeElement;
document.getElementById("focused").value =
target ? target.id||target.tagName||target : '';
}
...
<button id="btn1" onblur="showBlur(event)">Button 1</button>
<button id="btn2" onblur="showBlur(event)">Button 2</button>
<button id="btn3" onblur="showBlur(event)">Button 3</button>
<input id="focused" type="text" disabled="disabled" />
警告:この手法は、キーボードでフィールドをタブ移動することによるフォーカスの変更には機能しません。また、Chrome または Safari ではまったく機能しません。(IE を除く)を使用する際の大きな問題は、イベントが処理されるまで一貫して更新されず、処理中に有効な値がまったくない可能性があることです! これは、Michiel が最終的に使用したテクニックのバリエーションで軽減できます。activeElement
blur
function showBlur(ev)
{
// Use timeout to delay examination of activeElement until after blur/focus
// events have been processed.
setTimeout(function()
{
var target = document.activeElement;
document.getElementById("focused").value =
target ? target.id||target.tagName||target : '';
}, 1);
}
これは、ほとんどの最新のブラウザー (Chrome、IE、および Firefox でテスト済み) で動作するはずですが、Chrome はクリックされた(タブで移動した)ボタンにフォーカスを設定しないことに注意してください。