2014-04-11 3 views
0

자바 스크립트 코드로 취급되는 HTML 요소에 내 자신의 속성을 만들 수 있으며 내 코드가 필요할 때 실행할 수 있습니까?나만의 이벤트 속성을 만들 수 있습니까?

예를 들어 사용자 지정 이벤트 onpagerefresh을 만들고 동시에 HTML을 작성한 사람이이 이벤트를 처리하는 특성을 추가 할 수 있도록 허용한다고 가정합니다.

<body onpagerefresh="updateContents()"> 

나는이 새로운 onpagerefresh 속성의 값을 얻을 수있는 HTML을 구문 분석 할 수,하지만 내가 어떻게 자바 스크립트는 자바 스크립트 코드가 아닌 문자열로이 속성에 아무것도 치료 알 수 있습니까?

+1

그리고 _ "eval() 사용 _"이라고 쓰여있는 첫 번째 사람이 찰칵 소리를냅니다. – IQAndreas

+3

왜 그들은 뺨을 때릴까요? 문자열이 있고이를 JavaScript 코드로 취급하려는 경우 'eval()'또는 그 친구 중 하나가 완벽한 도구입니다. 만약 당신이 오직 함수를 호출했다면, 당신은'window [fnName]()'을 할 수 있습니다. – alex

+0

@alex 만약'eval()'이이 경우에 옳은 사용법이라고 생각된다면,이 인스턴스에서 왜 좋은 생각인지 추론 할 수있는 답변으로 추가하십시오. – IQAndreas

답변

1

new Function()function constructor을 사용하여 문자열에서 함수 개체를 가져온 다음 개체의 특성에 할당 할 수 있습니다. 예 :

그 의미있는 방법으로 평가()보다 더 낫다 (그것은 당신에게 별개의 범위를 준다 불구하고) 논쟁의 여지가있다, 그러나 당신이 그것을 할 방법이 될 것입니다 여부
var divElement = document.getElementById('mydiv'); 
divElement.onpagerefresh = new Function("èvent", "alert();"); 

. 아마도 HTML을 구현하는 사람이 기존 함수 이름 (onpagerefresh="updateContents")을 사용하도록 허용 한 다음 해당 코드를 예를 들어, window["updateContents"](). 그렇게하면 이전 DOM 삽입이 임의의 자바 스크립트를 코드에 쓰지 않게됩니다. 물론 그 기능을 제한합니다. 귀하의 경우에는

https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

:

경우
+0

''새 Function()'은 모든 바닐라 DOM 이벤트에서 사용할 수있는'event' 매개 변수를 전달할 수 있기 때문에 제가 찾고있는 것입니다. – IQAndreas

+0

하지만 코드에 오타가 있다고 생각합니다. 'e'는 문자열이어야하고 (다른 DOM 이벤트와 일치하는 것이 이상적으로는'event'입니다.) : new function ("event", "alert();")' – IQAndreas

+0

그리고 두 번째로 onpagerefresh 속성을 설정합니다 "속성에 지정하는 것"과 같은 것이 아닙니다. – IQAndreas

0

당신이 청취자에 대한 지원과 함께 실제 이벤트를 만들려면,이 모질라 기사는 그렇게 할 수있는 방법을 설명

var event = new Event('onpagerefresh'); 

// Listen for the event. 
elem.addEventListener('onpagerefresh', function (e) { 
    updateContents(); 
}, false); 

// Dispatch the event. 
elem.dispatchEvent(event); 

비록 브라우저 간 지원을 조심해야합니다.

+0

브라우저 간 지원에 관해서,'addEventListener()'를 가진 모든 브라우저는'dispatchEvent()'를 가져야합니다, 맞습니까? – IQAndreas

+0

맞습니다. IE 8 이하는 특별하며 attachEvent() 및 fireEvent()가 필요합니다. – wongcode

관련 문제