Programing

jQuery : 이벤트 핸들러 함수에서 이벤트 객체를 인수로 전달하지 않고 가져 오는 방법은 무엇입니까?

lottogame 2020. 11. 15. 10:48
반응형

jQuery : 이벤트 핸들러 함수에서 이벤트 객체를 인수로 전달하지 않고 가져 오는 방법은 무엇입니까?


onclick내 링크에 속성 이 있습니다 .

<a href="#" onclick="myFunc(1,2,3)">click</a>

이는 JavaScript에서이 이벤트 핸들러를 가리 킵니다.

function myFunc(p1,p2,p3) {
    //need to refer to the current event object:
    alert(evt.type);        
}

이벤트 객체 "evt"가 매개 변수에 전달되지 않았기 때문에이 객체를 얻을 수 있습니까?

나는 시도 window.event하고 $(window.event)있지만, 둘 다이다 undefined.

어떤 생각?


이벤트 객체 "evt"가 매개 변수에서 전달되지 않았기 때문에이 객체를 얻을 수 있습니까?

아니요, 신뢰할 수 없습니다. IE 및 일부 다른 브라우저에서는 window.event(아님 $(window.event)) 으로 사용할 수 있지만 이는 비표준이며 모든 브라우저에서 지원되지는 않습니다.

이벤트 객체를 함수에 전달하는 것이 좋습니다.

<a href="#" onclick="myFunc(event, 1,2,3)">click</a>

event변수 가있는 컨텍스트에서 코드를 실행하기 때문에 IE가 아닌 브라우저에서도 작동합니다 (로 확인되기 때문에 IE에서 작동 event합니다 window.event). IE6 +, Firefox, Chrome, Safari 및 Opera에서 사용해 보았습니다. 예 : http://jsbin.com/iwifu4

그러나 가장 좋은 방법은 최신 이벤트 처리를 사용하는 것입니다.

HTML :

<a href="#">click</a>

jQuery를 사용하는 JavaScript (jQuery를 사용하기 때문에) :

$("selector_for_the_anchor").click(function(event) {
    // Call `myFunc`
    myFunc(1, 2, 3);

    // Use `event` here at the event handler level, for instance
    event.stopPropagation();
});

... 또는 당신이 정말로 전달하려는 경우 eventmyFunc:

$("selector_for_the_anchor").click(function(event) {
    myFunc(event, 1, 2, 3);
});

선택자는 앵커를 식별하는 모든 것이 될 수 있습니다. 선택할 수있는 매우 풍부한 세트 가 있습니다 (거의 모든 CSS3와 일부). 당신은 추가 할 수 id또는 class앵커로, 그러나 다시, 당신은 다른 선택이있다. 인위적인 것을 추가하는 것보다 문서의 어디에서나 사용할 수 있다면 좋습니다.


IE window.event에서는 'use strict'지시어 없이 다른 브라우저에서 이벤트 객체 를 얻을 수 arguments.callee.caller.arguments[0]있습니다.

function myFunc(p1, p2, p3) {
    var evt = window.event || arguments.callee.caller.arguments[0];
}

다음과 같이 이벤트 핸들러 선언을 작성하십시오.

<a href="#" onclick="myFunc(event,1,2,3)">click</a>

그러면 "myFunc ()"함수가 이벤트에 액세스 할 수 있습니다.

"onclick"속성의 문자열 값은 Function 생성자를 호출하는 브라우저 (내부적으로)와 거의 동일한 방식으로 함수로 변환됩니다.

theAnchor.onclick = new Function("event", theOnclickString);

(IE 제외). 그러나 "이벤트"는 IE의 전역 (창 속성)이므로 모든 브라우저에서 이러한 방식으로 함수에 전달할 수 있습니다.


마크 업에서 이벤트 핸들러를 호출하면 지금처럼 할 수 없습니다 (x-browser). 그러나 클릭 이벤트를 jquery로 바인딩하면 다음과 같은 방법이 가능합니다.

마크 업 :

  <a href="#" id="link1" >click</a>

자바 스크립트 :

  $(document).ready(function(){
      $("#link1").click(clickWithEvent);  //Bind the click event to the link
  });
  function clickWithEvent(evt){
     myFunc('p1', 'p2', 'p3');
     function myFunc(p1,p2,p3){  //Defined as local function, but has access to evt
        alert(evt.type);        
     }
  }

이벤트 산부인과 이후

참고URL : https://stackoverflow.com/questions/5849370/jquery-how-to-get-the-event-object-in-an-event-handler-function-without-passing

반응형