フォーム入力とリンクタグの一部であるfocusinイベントは、divタグとspanタグに適用されます。これは、floatおよびinline-block要素で発生します。この問題はIE(8および9)で発見されています。
デモ==> http://jsfiddle.net/Agczq/
これを止める方法はありますか?
ありがとう
フォーム入力とリンクタグの一部であるfocusinイベントは、divタグとspanタグに適用されます。これは、floatおよびinline-block要素で発生します。この問題はIE(8および9)で発見されています。
デモ==> http://jsfiddle.net/Agczq/
これを止める方法はありますか?
ありがとう
通常のイベントとは異なり、予想focusin
とは異なり、バブルアップします。これに対処する2つの主な方法は、イベントの委任、または単にイベントのバブリングを停止することです。focusout
focus
あなたのフィドルは理解するのが難しいです(すなわち:あなたが何をしようとしているのかわからない)。(JSコードをjsfiddleのJavaScriptフィールドに移動した後)最初に頭に浮かぶのはfocus
、優れたブラウザーでイベントをキャプチャし、不格好なfocusin
IEでバブリングしていることです。
特にIEは実際のイベントのキャプチャをサポートしていないため、これは非常に煩わしい場合があります。それにもかかわらず、ここに(単純ですが、テストされ、機能している)提案があります:
function mycb(evt)
{
evt = evt || window.event;//get event object
var from = evt.target || evt.srcElement;//get source
if (evt.stopPropagation)//stop event from bubbling
{
evt.stopPropagation();//shouldn't be necessary, but you never know
}
else
{
evt.cancelBubble = true;//stop propagation in IE-lingo
}
if (from.tagName === 'DIV' || from.tagName === 'SPAN')
{//if source was a tag that souldn't fire event, return false;
if (evt.preventDefault)
{
evt.preventDefault();
return false;
}
evt.returnValue = false;
return false;
}
alert("fired!!!");
}
var elem = document.getElementById("mybox");
if( elem.attachEvent )
{
elem.attachEvent("onfocusin", mycb);
}
else
{
elem.addEventListener("focus", mycb, true);
}
このコードはIE8でテストされており、フィドルはここにあります。
今日、このイベントについて読んだのはたまたまここです。言及する価値のある情報源だと思います。
お役に立てれば