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


80

私の会社のウェブサイトに、1つのウェブページを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();
        }
    }

2
「event.srcElement」をグーグルですばやく検索するこの説明と解決策が得られました。
軌道上でのライトネスレース2011年

回答:


172

srcElementは元々IEから来た所有権です。標準化されたプロパティはtarget次のとおりです。

var target = event.target || event.srcElement;

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

クロスブラウザ情報の詳細については、quirksmode.org-イベントプロパティも参照してください。


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

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

大切ですか?何をしているのかわからないので言えません...code..


そのフェリックスに感謝しますが、それでもjavascriptエラーが発生します "イベントは未定義です[このエラーで中断] var target = window.event.target || event.srcElement;"理由は何ですか?
code511788465541441 2011年

1
@ user521180:他のすべてのブラウザでは、イベントは経由では利用できませんwindowが、最初の引数としてイベントハンドラに渡されます。したがって、のようなものが必要ですfunction yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}。または、さらにヘルプが必要な場合は、これが含まれているコードを投稿してください。
Felix Kling 2011年

関数全体を含めるように元の投稿を編集しました
code511788465541441 2011年

1
@FelixKling現在、FF Event.srcElement
Alex Char

1
これは更新する必要があります。そうです、@ FelixKling。Event.srcElementは、Firefoxでのみサポートされなくなりました。developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
SlimPDX 2016年

5

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内で関数を呼び出すとevent、ブラウザーがFirefoxの場合に備えてパラメーターが追加されています。

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 -->
};

1
ここでちょうど新しい編集iamをありがとう:)もう一度ありがとう
Marwan

この関数にすでに別の値を渡している場合はどうなりますか?2番目のパラメータとして「evt」を追加するだけですか?次に、Javascriptはどのパラメーターがイベントオブジェクトであるかをどのように知るのですか?それは最初のパラメータである必要がありますか?または最後?
ヴィンセント

0

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

コードに含める:

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

と変更

event.srcElement.XXXXX to target.XXXXX

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.