1

フォーム入力とリンクタグの一部であるfocusinイベントは、divタグspanタグに適用されます。これは、floatおよびinline-block要素で発生します。この問題はIE(8および9)で発見されています。

デモ==> http://jsfiddle.net/Agczq/

これを止める方法はありますか?

ありがとう

4

1 に答える 1

0

通常のイベントとは異なり、予想focusinとは異なり、バブルアップします。これに対処する2つの主な方法は、イベントの委任、または単にイベントのバブリングを停止することです。focusoutfocus

あなたのフィドルは理解するのが難しいです(すなわち:あなたが何をしようとしているのかわからない)。(JSコードをjsfiddleのJavaScriptフィールドに移動した後)最初に頭に浮かぶのはfocus、優れたブラウザーでイベントをキャプチャし、不格好なfocusinIEでバブリングしていることです。
特に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でテストされており、フィドルはここにあります。
今日、このイベントについて読んだのはたまたまここです。言及する価値のある情報源だと思います。

お役に立てれば

于 2012-06-08T14:55:07.973 に答える