0

Firefox で動作するように更新している古いコードがいくつかあり、問題に遭遇しました。

コードには、次のような関数があります。

function tableEnter() {

     myLocation = event.srcElement;

}

これは、Firefox では機能しません。私はこれをかなり調査しましたが、私が見つけた解決策のほとんどは、この関数にイベントを渡す必要があり、渡された e パラメータに基づいて動作します。...残念ながら、更新中のコードでは、パラメーターが渡されていません。

関数にパラメーターを渡さずに、firefox で event.srcElemet を機能させるための解決策は何ですか?

編集:

さて、問題は次のようになります: イベント オブジェクトを tableEnter() 関数に渡すにはどうすればよいですか?

コードが現在行っていることは次のとおりです。

$(document).ready(function () {
    //make table rows
    //for every new table row...
    myRow.onmouseover = tableEnter; (this is probably a bad name. it should be like..rowEnter. But this is the way I found the code)
});

問題は、イベント オブジェクトを tableEnter() に渡して、インターネットで提案されていることと以下の回答を実行できるようにする方法です。

ありがとう。

4

1 に答える 1

2

ハンドラーの引数でなくても、イベントオブジェクトにアクセスしたい理由が正直にわかりません。しかし、ねえ、それは私だけです。パラメータは指定されていませんが、FF と chrome は好きなように動作し、とにかくイベント オブジェクトをハンドラに渡します。そう:

function tableEnter()
{
    var evt = window.event || arguments[0];
    var src = evt.target || evt.srcElement;
}

以上です。個人的には、ワイド ウェブ全体が行っていることを行うことをお勧めします。

function handler(e)
{
    e = e || window.event;
    var target = e.target || e.srcElement;
}

FF を使用しているので、どんなに曖昧であっても、コーディング規約や標準からあまり逸脱しようとするべきではありません。少なくとも、標準や慣習がまったくないよりはましです。


更新を考慮して、関数定義を次のように変更してください。

function tableEnter(e)
{
    //though in jQuery, I suspect e is allready X-browser-proof
    e = e || window.event;
    //just leave ^^this^^ line out, and check in IE: alert(typeof e);
    //if it alerts object, jQuery passed the event object for you
    var theRow = this;//<-- this points to the row that triggered the mouseover
    var jQRow = $(this);//gives you access to jQuery methods

    var target = e.target || e.srcElement;//<-- mainly of importance in delegation
}
于 2012-09-17T14:36:19.427 に答える