2014-09-30 5 views
0

요소를 처리하고 JSON 응답을 처리하기 위해 일부 JS 함수를 작성하고 있습니다. 내가 겪고있는 문제는 클릭 기능 외부에서 클릭 된 요소를 참조하는 것입니다.콜백 함수의 클릭 된 요소에 대한 동작

HTML의 모형 :

<div class="container"> 
    <div class="link"> 
    <a href="#" onclick="linkify()">Test</a> 
    </div> 
    <div class="output"> 
    <textarea class="output-textarea"></textarea> 
    </div> 
</div> 
<div class="container"> 
    <div class="link"> 
    <a href="#" onclick="linkify()">Test</a> 
    </div> 
    <div class="output"> 
    <textarea class="output-textarea"></textarea> 
    </div> 
</div> 

그리고 JS : http://jsfiddle.net/Lqaw05j8/4/ 내 바이올린에

은, 모든 변수와 이벤트가 발생 정의,하지만 내 jQuery를 DOM 탐색 :

// link function 
function linkify() { 
    // save reference to click element 
    activeElement = $(this); 
    // make AJAX call 
} 

// callback function; the parameters of this function 
// are defined by an API and cannot be changed 
function callback(json) { 
    $(activeElement).closest('.container').find('.output-textarea').val(json); 
} 

여기 jsFiddle 작동하지 않습니다.

답변

0

당신은 함수에 인수로 this을 통과해야이 같은 전역 변수를 사용하여 콜백에 컨텍스트를 전달하는 가장 좋은 방법은 아니라고

<a href="#" onclick="linkify(this)">Test</a> 

function linkify(element) { 
    // save reference to click element 
    activeElement = element; 
    // make AJAX call 
} 

참고. 콜백이 발생하기 전에 사용자가 다른 요소를 클릭하면 활성 요소가 변경됩니다. 컨텍스트를 전달하거나 콜백 함수를 종료하려면 $.ajax()context: 옵션을 사용하는 것이 좋습니다.

+0

AJAX 호출 및 콜백 API에서 하드 코드 된 및 변경할 수 없으므로이 제한을 해결하려면 내 시도입니다. AJAX 호출이나 콜백 매개 변수를 변경하지 않고이 작업을 수행하는 더 좋은 방법이 있습니까? – HasecBinUsr

+0

매개 변수를 전달하지 않으면'linkify()'가 클릭 한 요소를 알 수있는 방법이 없습니다. 일부 브라우저는 전역 변수'event'를 가지고 있으므로'event.target'는 작동하지만 Firefox에서는 작동하지 않습니다. – Barmar