3

次のコードを使用して、要素にonfocusイベントを割り当てようとしました。これにより、要素がフォーカスされるたびに、alertを呼び出します。ただし、アラートはページが読み込まれたときにのみ表示され、それ以降は表示されません。

<html>
<head>
</head>
<body onload = "loadings();">
<div>   
    <form>  
        <input type="text" id="foo"/>
    </form>
</div>

<script type="text/javascript">
function loadings(){
    document.getElementById("foo").onfocus = alert("foo"); 
}
</script>
</body>
</html>

<input type="text" id="foo" onfocus="alert('foo')"/>私が達成しようとしていることに対して私はできないことに注意してください。

また、これはFirefox、Chrome、IE、Safariで機能するはずです。

前もって感謝します!

4

4 に答える 4

5

このコード:

document.getElementById("foo").onfocus = alert("foo");

alert()を呼び出した結果をonfocusプロパティに割り当てます。あなたが意味したのは:

document.getElementById("foo").onfocus = function(){ alert("foo"); };

これは、イベントごとに1つのハンドラーしか持てないDOMレベル0イベントモデルを使用しています。クロスプラットフォームでありながらより柔軟なものが必要な場合は、jQueryのように、ライブラリを試してイベントモデルを抽象化することができます。

$('#foo').focus(function(){ alert("foo"); });

そうすれば、IEのattachEventと他のすべてのaddEventListenerについて心配する必要はありませんが、例のような単純なケースのみが必要な場合は、レベル0モデルで問題なく、すべてのブラウザーで機能します。

于 2011-02-19T06:43:09.793 に答える
2

rspの答えは正しく、私の意見ではより良いスタイルです。ソリューションをよりよく理解するには、この構文をrspの構文と比較してください。どちらも同じ結果を達成します。

function MyEventHandler ()
{
    alert("foo");
}

document.getElementById("foo").onfocus = MyEventHandler;

構文で覚えておくべき重要なことは、関数名を含めることですが、括弧()は含めないでください。関数を呼び出すのではなく、関数自体を参照する必要があります。イベントが発生すると、イベントは関数を呼び出します。

于 2011-02-19T06:50:16.123 に答える
0

以下のようにaddeventlistenerを使用できます。

document.getElementById("foo").addEventListener("focus", function(){alert("foo")}, false);
于 2011-02-19T06:58:18.743 に答える
0

イベントハンドラーを追加するジェネリック関数は次のとおりです

function addEvent( obj, type, fn ){
    if(!obj){
        return;
    }
    if (obj.addEventListener){
        obj.addEventListener( type, fn, false );
    }
    else{
        if (obj.attachEvent){
            obj["e"+type+fn] = fn;
            obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
            obj.attachEvent( "on"+type, obj[type+fn] );
        }
    }
}

それから

addEvent(document.getElementById('foo'),'focus',myEventhandler);
于 2011-02-19T07:44:01.303 に答える