2010-08-18 10 views
3

나는이 jquery에 가장 적합하지 않습니다. 하지만 같은 기능을 일으키는 여러 이벤트를 적용 할 수 있도록 함수에서 작업을 분리하려고합니다. 불행히도 이것은 작동하지 않습니다. 왜 그런지 알아?동일한 기능에 여러 이벤트를 적용하는 방법

는 기능 업데이트,하지만 여전히 오류

$(document).ready(function() { 

var $info_items = jQuery('.checkbox.has_info, .has_info'); 

$info_items.click(function(event) { 
$(this).show_text(event); 
}); 


// I suspect it has something to do with this initalizer of the function here 

jQuery.fn.show_text = function(event){ 
    var $info_item = jQuery(this); 
    $info_items.filter(function(index){ 
    return $(".hidden_text").css("display","block"); 
    }).not($info_item).parent().next().next().hide("slow"); 
    $info_item.parent().next().next().show("fast"); 
}); 

}); 
+0

다음 번에 더 나은 제목을 사용하십시오. 아마도 "같은 기능에 여러 이벤트를 적용하는 방법"과 같은 것일 수 있습니다. – Bart

답변

7

, 이벤트 e 무엇입니까? 그것을 사용하려면 click() 함수에 대한 이벤트 인수의 이름을 지정해야합니다. 또한, show_text는 그것이 this을 가지고 호출, 당신은 요소를 호출해야합니다

$info_items.click(function (event) { 
    // 'this' is the element in $info_items which was clicked 

    // invoke show_text on the element in question 
    $(this).show_text(event); 
}); 

또한 최종 }); 라인에 추가 ) 있습니다.

+0

'this'가 작동하려면 이벤트를 전달해야한다고 생각했습니다. 그러나 나는 그것을 꺼 냈고, 여전히 오류가 있습니다. 귀하의 예를 이해하지만, 그렇게하지 않으려 고하므로 여러 이벤트가 동일한 기능을 수행 할 수 있습니다. – Trip

+0

업데이트 해 주셔서 감사합니다. 나는 이것을 시도하고, 그것은 여전히 ​​폭탄이다. 전체 기능을 주석 처리하면 좋다. ;). 어쩌면 내 문장을 초기화하는 것이 잘못되었을 수도 있겠습니까? – Trip

+0

이것을'$ (function() {}) 내부에서 실행합니까? '$ info_items' 란 무엇입니까? 더 많은 정보가 없으면 우리는 도울 수 없습니다. – meagar

2

jQuery bind을 사용하면 여러 이벤트를 단일 함수에 첨부 할 수 있습니다.

$('#whatever').bind('mouseover focus click', function() { 
    your_custom_function(); 
}); 
2

이와 비슷한 제품을 찾고 계십니까?

var handle = function(event) { 
    $(event.currentTarget).show_text(event); 
}; 
$info_items.bind('click blur', handle); 
+0

함수는 명시 적으로 기능을 수행해야합니까? – Trip

+0

핸들러 함수를 로컬 변수로 정의하면 (예 : 로컬 명명 된 함수 인 경우에도) 명명 된 함수로 정의하면 리스너가 먼저 올 수 있습니다. – jdc0589

관련 문제