2013-01-14 4 views
1

하나의 핸들러를 여러 이벤트에 바인드하고 둘 이상의 이벤트가 발생하더라도 핸들러가 한 번만 호출되도록하려면 어떻게합니까?하나의 핸들러를 여러 이벤트에 바인드

$(".element").bind("click select" ,handl); 
function handl (e) 
{ 
    //my code 
} 

이 코드의 문제점은 각 이벤트마다 handl이 두 번 호출된다는 것입니다. 두 이벤트가 모두 발생하면 처리기를 한 번만 호출해야한다고 생각하면 제게 말해주십시오.이 코드의 핸들러가 두 번 호출되어야한다고 생각하기 때문입니다.

+0

같은 이벤트 기능을 감싸는 상기 CSTE 연구진() 메소드에 이벤트 핸들러를 부착하기위한 바람직한 방법 문서. – j08691

+0

당신은 이미 솔루션을 게시했습니다 (예외를 제외하고는 그것을 사용하기 전에 함수를 선언해야합니다) - 그래서 무엇이 문제입니까? 한 번만 실행하려면 몇 가지 스위치 - 실행 횟수를 저장하는 변수를 사용할 수 있습니다. – feeela

+1

핸들러의 끝에있는 모든 이벤트 리스너 목록에서 리스너를 제거합니다. – 11684

답변

4

만약 내가 올바르게 이해가 잘 모르겠다.하지만 한 사용자 작업에서 여러 번 핸들러 함수를 호출하는 여러 이벤트를 방지하려고한다고 가정하고있다.

var isExecuting = false; 
$(".element").bind("click focus" ,function() {  
    if (isExecuting) return false; 
    isExecuting = true; 
    handl.call(this); //maintain the context 
    isExecuting = false; 
}); 
function handl (e) 
{ 
    //your code 
} 
+0

예, 올바르게 이해했습니다. 하나의 작은 변경을하고 isExecuting = false;를 핸들러 내부로 옮겨야했습니다. 그게 내 코드에만 해당되는지 확실하지 않습니다. – Dharman

1

사용 클로저가 FYI jQuery를 1.7으로 본

$("#a").bind("click focus", function() { 
    var fired = false; 
    return function() { 
     if (!fired) { 
      alert("click occured"); 
      fired = true; 
     } 
    } 
}()); 

jsfiddle of it here

관련 문제