web-dev-qa-db-ja.com

Firefoxでevent.srcElementを機能させるにはどうすればよいですか?

私の会社のWebサイトには、1つのWebページがfirefoxと互換性がないというifステートメントがあります

if(event.srcElement.getAttribute("onclick") == null){ 
...code..
document.mainForm.submit();
}

Ifステートメントの条件をコメントアウトし、今ではforefoxで動作するようにしました。私の質問は、event.srcElement.getAttribute( "onclick")とは何か、それが重要であり、将来問題が発生するかどうかです。また、Firefoxで動作するように条件を置き換えることができる同様のものがありますか?

編集:

 function gotoRDManagerPT(PTId, bDDetailId) {
        if(!proceed()) return false;
        var target = event.target || event.srcElement; 
        if(event.target.getAttribute("onclick") == null) { 
            document.mainForm.displayRDManagerPT.value = "true";
            document.mainForm.PTId.value = PTId;
            document.mainForm.bDDetailId.value = bDDetailId;
            document.mainForm.submit();
        }
    }
80

srcElementは、元々IEに由来する独自のプロパティです。標準化されたプロパティは target

_var target = event.target || event.srcElement;

if(target.onclick == null) { // shorter than getAttribute('onclick')
    //...
    document.mainForm.submit();
}
_

クロスブラウザの詳細については、 quirksmode.org-Event properties もご覧ください。


それが何をしているかという質問について:

_event.target_/_event.srcElement_には、eventが発生した要素への参照が含まれます。 getAttribute('onclick') == nullは、クリックイベントハンドラーが インラインイベント処理 を介して要素に割り当てられているかどうかを確認します。

大切ですか? _...code.._が何をしているかわからないので、私たちは言うことができません。

172
Felix Kling

IEイベントオブジェクトはウィンドウオブジェクトで既に使用可能です; Firefoxでは、イベントハンドラーのパラメーターとして渡されます。

JavaScript:

function toDoOnKeyDown(evt)

{

    //if window.event is equivalent as if thie browser is IE then the event object is in window
    //object and if the browser is FireFox then use the Argument evt

    var myEvent = ((window.event)?(event):(evt));
    //get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    //To Do -->

}

HTML:

<input type="text" id="txt_Name" onkeydown="toDoOnKeyDown(event);"/>

Html内で関数を呼び出したときに気づいたように、ブラウザーがFirefoxの場合に備えて、パラメーターeventを追加しました。

私は記事で、IEのイベントオブジェクトはwindow.eventそして、Firefoxではパラメーターとしてそれを配置する必要があります。

コードに添付する必要がある場合:

document.getElementById('txt_Name').onkeydown = function(evt) {
    var myEvent = ((window.event)?(window.event):(evt));


    // get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    // To Do -->
};
5
Marwan

次のようにクイックフィックスを試してください:

コードに含める:

let target = event.target || event.srcElement;

そして変化

event.srcElement.XXXXX to target.XXXXX

これにより、Firefoxの問題が解決されます。

0