2010-07-19 4 views

답변

3

이 기능을 제공하는 클릭, 포커스, .. 이벤트에 대한 래퍼를 작성하십시오. 그러한 래퍼를 작성하는 것은 상당히 사소합니다. 한 가지 방법이 있습니다 :

jQuery.fn.addClick = function(fn) { 
    var selector = this.selector; // capture the selector here 
    this.click(function(event) { // write a wrapper for the click handler 
     fn(event, selector); // call the user's handler and pass it the selector 
    }); 
}; 

이벤트 처리기 함수는 이제 1 대신 2 개의 매개 변수를 가져옵니다. 첫 번째는 이벤트이고 두 번째는이 이벤트를 바인딩하는 데 사용 된 선택기입니다.

$("#content .child").addClick(function(e, selector) { 
    alert(selector); // "#content .child" 
}); 

폐쇄와 함께 마무리의 장점은 다른 선택기와 같은 요소에 여러 클릭 이벤트를 결합 할 수 있다는 것입니다, 그들은 모두 함께 작동합니다.

See an example.

3

일반적으로 selector을 사용하지만이 경우 this에는 선택자가 없습니다. 당신은 사용할 수 있습니다 : 물론

var div = $('#content .child'); 
div.click(function() { 
    alert(div.selector); 
}); 

, 유용 (아마도 디버깅) 각 자녀에 대해 동일한 선택을 보여, 그리고 모든 것이다. 당신은 간단 갈 수 있습니다, 당신을 마음 :

var selector = '#content .child'; 
$(selector).click(function() { 
    alert(selector); 
}); 

근무 예 : 그렇다 코비의 대답에서

+0

임시 변수를 사용하여 셀렉터를 찾을 수 있지만 변수를 사용하여 셀렉터를 찾으려합니다. –

+0

@ Samurai Jack - 이벤트 처리기 컨텍스트 내에서 가능하지 않다고 생각합니다. 사실, '선택자'는 그다지 신뢰할 수 없습니다. '$ ('div'). add ('p')'- 여기에는 콜렉션이 있지만 선택자는 없다. – Kobi

3

http://jsfiddle.net/cmuTv/, 그것은 일반적으로 불가능합니다. 그것은 "다음 루프가 주어지면 원래 어레이를 어떻게 다시 얻을 수 있습니까?"라고 물어 보는 것과 같습니다.

var array = [1, 2, 3, 4, 5]; 
for (i = 0; i < array.length; i++) { 
    var a = array[i]; 
    alert(/* how do I get the original array given only 'a'? */); 
} 

그것은이 경우, 다시에만 a 주어진 원래의 배열을 얻을 수없는 것이 분명합니다. 그러나 분명하지 않은 것은 귀하의 경우에도 마찬가지입니다.

.click()에 대한 호출이 기본적으로 .each()에 대한 호출로 바뀌고 기본적으로 일치하는 각 요소 주위에 단지 for 루프가 있기 때문입니다. 컬렉션에서 하나의 요소 만보고 있으면 원래 컬렉션을 다시 가져올 방법이 없습니다.