web-dev-qa-db-ja.com

event.targetがFirefoxで機能しない

 var x = event.target||event.srcElement;
 document.getElementById(x.id).style.left =  200 + "px" ;
 document.getElementById(x.id).style.top  =  100 + "px" ;

Google chrome and IEですが、Firefoxでは機能しません。googleで試してみました。googleはevent.srcElement(works on IEしかし、Firefoxではありません)event.targetを追加しましたが、まだ機能していません。Firefoxで機能するために必要な変更はもうありますか?ところで、Firefoxの3.5バージョンを使用しています。

       function up()
           {
                dragok = false;
                document.onmousemove = null;
                var x = event.target||event.srcElement;
                document.getElementById(x.id).style.left= 200 + "px" ;
                document.getElementById(x.id).style.top= 100 + "px" ;
           } 

Firefoxで動作するように私を助けてください

18
niko

ハンドラーの仮パラメーターとしてeventを定義してください。

IEはグローバルに定義し、Chromeは両方の場所で定義するため、どちらの方法でも機能しますが、Firefoxは関数パラメーターとしてのみ定義します。

function up( e ) {
    //       ^-----------------------------------------------------+
    if( !e ) e = window.event; // <---needed this --- and this ->--+

    dragok = false;
    document.onmousemove = null;
    var x = e.target||e.srcElement; // <--- and these
    document.getElementById(x.id).style.left= 200 + "px" ;
    document.getElementById(x.id).style.top= 100 + "px" ;
} 
44
user113716

Jqueryを使用して問題を解決しました。たとえば、使用できる要素のIDを取得するには:

var x = $(this).attr('id');
1
LipeTuga

このソリューションは、Firefoxブラウザーでも機能します。 keydownアクションを開始すると、eventプロパティがこのようにグローバル変数に設定されます。

 var keyEvent=null; 

そのeventプロパティをkeyEventに割り当て、.itemはターゲット要素です。

  $(document).on("keydown",'.item', function(e){ 

                keyEvent=e;                                    

        },this))

次に、コードでkeyEventを使用します。

     function up( e ) {
           if( !e ) e = keyEvent;  
             dragok = false;
             document.onmousemove = null;
             var x = e.target||e.srcElement; 
             document.getElementById(x.id).style.left= 200 + "px" ;
             document.getElementById(x.id).style.top= 100 + "px" ;
         }

eventプロパティをwindowのグローバル変数に設定しないでください。

0
balaji s