2010-07-11 5 views
1

최선을 다해서 설명 드리겠습니다 ...eval이 추가 된 이벤트 리스너 제거

페이지가 있으니 페이지 A라고하겠습니다. 해당 페이지에서 버튼을 클릭하면 ajax 요청이 전송되고 반환 데이터는 eval()입니다. 해당 데이터에는 분명히 자바 스크립트 코드가 들어 있습니다. 이 코드에는 eval 된 경우 pageA에 추가되는 이벤트 리스너가 포함될 수 있습니다. jquery $ ('body')와 같은 것. 예를 들어 click().

pageA의 버튼을 다시 클릭하면 해당 이벤트에 추가 된 모든 이벤트 리스너와 데이터를 제거 할 수있는 기능이 있습니까?

데이터를 평가하기 전에 변수에 ajax 호출에서 반환 된 모든 데이터를 캡처하므로 $ (data) .remove()를 수행하고 모든 이벤트 리스너와 데이터를 마술처럼 사라지게하는 방법이 있습니다. ?

평가 데이터를 사용하면 페이지에서 텍스트를 제거하고 모든 문제를 해결할 수있는 페이지 자체에는 실제로 추가되지 않지만 이벤트 리스너는 확실히 머물러 있습니다.

아이디어가 있으십니까?

답변

4

나는 eval의 악의에 대한 강의를 피하고 jQuery에서 네임 스페이스의 네임 스페이스를 시도 할 것을 권장한다.

예를 들어

http://docs.jquery.com/Namespaced_Events

는 데이터의 코드 네임 스페이스와 함께 모든 새로운 이벤트를 추가 할 수 있습니다

$(node).bind("click.myNameSpace", fn); 

을 그리고 당신이 그것을 제거 할 때, 당신은 물론, 그건, $(node).unbind("click.myNameSpace")을 그들이 추가 된 요소를 알고 있다고 가정합니다. 추가 된 이벤트 유형을 모르는 경우 $(node).unbind(".myNameSpace")을 수행하면 네임 스페이스 아래의 모든 이벤트가 제거됩니다.

+0

당신이 더 나은 방법을 알고 있다면, 나는 그것을 듣기보다 기쁠 것입니다. 나는 스크립트를 머리에 붙이려고했지만 스크립트 태그는 작동하지 않는다. 특히 eval은 나 자신을 좋아하지 않는다 .... 그래서 어떤 제안이 들릴 것이다. –

+0

@Senica 스크립트를 추가하면 eval보다 훨씬 좋을 것입니다. 그들은 더 느리고 악용 될 수 있습니다. 아이디어는 실행 가능한 코드 대신 데이터를 보내려고 시도하는 것입니다. –

+0

맞아, 불행히도 내 경우에는 작동하지 않습니다. 이것은 관리자와 플러그인을위한 것입니다. 플러그인 코드는 eval 된 것입니다. 플러그인을 통해 수행 할 수있는 작업을 제한하고 싶지는 않습니다. 플러그인을 제거 할 수 있어야합니다. –

0

반환 된 자바 스크립트 eval 전에 특정 버튼에 현재 연결된 모든 이벤트 핸들러를 복사하는 것이 더 쉽습니다. 그런 다음 모든 이벤트를 바인드 해제하고 (추가 처리기를 추가 할 수있는 eval) 이전에 있었던 것을 다시 바인드하십시오.

EDIT : 이미 비슷한 질문이있는 것처럼 보입니다 : jQuery: Unbind event handlers to bind them again later (비록 jQuery를 사용하지만).

저는 도움을 요청할 수는 없지만 문의 한 JS를 제어 할 수는 없습니까? 왜냐하면 악의적 인 콘텐츠가 처음에는 전송되지 않도록하는 것이 좋습니다.