Firefox에서 event.srcElement를 어떻게 작동시킬 수 있으며 그 의미는 무엇입니까?


80

내 회사 웹 사이트에 하나의 웹 페이지를 firefox와 호환되지 않게 만드는 if 문이 있습니다.

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

나는 if 문 조건을 주석 처리했으며 이제 forefox와 함께 작동합니다. 제 질문은 event.srcElement.getAttribute ( "onclick")가 무엇인지, 그것이 중요한지, 그것이 미래에 문제를 일으킬 것인가입니다. 또한 파이어 폭스에서 작동하도록 조건을 대체 할 수있는 비슷한 것이 있습니까?

편집하다:

 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"에 대한 Google의 빠른 검색을 통해이 설명과 솔루션을 얻을 수 있었습니다.
밝기 경주 궤도에

답변:


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요소에 대한 참조를 포함합니다 event. getAttribute('onclick') == null클릭 이벤트 핸들러가 인라인 이벤트 처리 를 통해 요소에 할당되었는지 확인합니다 .

그것은 중요한가? 우리는 그것이 무엇을하고 있는지 모르기 때문에 말할 수 없습니다 ...code...


펠릭스에 감사드립니다.하지만 여전히 자바 스크립트 오류 "이벤트가 정의되지 않았습니다. [이 오류에서 중단] var target = window.event.target || event.srcElement;"이유를 알 수 있습니까?
code511788465541441

1
@ user521180 : 다른 모든 브라우저에서 이벤트는를 통해 사용할 수 window없지만 이벤트 처리기에 첫 번째 인수로 전달됩니다. 그래서 당신은 function yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}. 또는 도움이 더 필요한 경우이 코드가 포함 된 코드를 게시하십시오.
Felix Kling 2011 년

전체 기능을 포함하도록 원래 게시물을
편집했습니다

1
지금 생각 FF에서만 지원되지 않습니다 @FelixKling event.srcElement를
알렉스 숯불

1
업데이트해야합니다. 맞아요, @FelixKling. Event.srcElement는 이제 firefox에서만 지원되지 않습니다. developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
SlimPDX

5

IE에서 이벤트 개체는 이미 창 개체에서 사용할 수 있습니다. Firefox에서는 이벤트 핸들러에서 매개 변수로 전달됩니다.

자바 스크립트 :

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
단지 새로운 여기에 편집 스피 :) 주셔서 감사합니다 다시 thanxs
마르 완

이 함수에 이미 다른 값을 전달하고 있다면 어떨까요? 두 번째 매개 변수로 "evt"만 추가합니까? Javascript는 이벤트 개체가 어떤 매개 변수인지 어떻게 알 수 있습니까? 첫 번째 매개 변수 여야합니까? 아니면 마지막?
Vincent

0

다음과 같이 빠른 수정을 시도하십시오.

코드에 포함 :

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

그리고 변경

event.srcElement.XXXXX to target.XXXXX

이것은 Firefox의 문제를 해결합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.